配置 nginx 遇到错误排查(初级)

2023-11-12

系统版本:ubuntu 14.04,nginx 版本:nginx/1.4.6 (Ubuntu)

本文不是一步步搭建 nginx 的过程,而是我在使用 nginx 的过程中,整理自己遇到的的一些问题。适用于:nginx 遇到问题,排查问题的 checklist

在这里插入图片描述
一、安装

sudo apt-get update
sudo apt-get install nginx

注意:用 root 身份安装 nginx

二、常用命令
请在执行下面命令时,确保权限正确,统一在命令前加入:sudo,使用 root 权限操作 nginx。

查看 nginx 版本:nginx -v
检查配置语法是否正确:service nginx configtest
重启:service nginx restart
停止:service nginx stop
查看状态:service nginx status
如遇到,启动失败的情况,请查看 nginx 错误日志,日志位于:/var/log/nginx/error.log

三、nginx 正则表达式匹配
location 支持的正则规则,注意:使用正则需要谨慎,确定正则的正确性。

容易出现:因为错误的正则,导致 NOT FOUND:

The requested URL was not found on the server.
If you entered the URL manually please check your spelling and try again.

3.1 正则表达式匹配
在这里插入图片描述

3.2 例子

  1. location = /:匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配
  2. location ^~ /images/:匹配任何已/images/开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
  3. location ~* .(gif|jpg|jpeg)$:匹配任何已.gif、.jpg 或 .jpeg 结尾的请求

四、必知参数
4.1 root
默认访问请求文件的所在目录。例如访问:http://hellogithub.com/img/hello-github.jpg,nginx 中配置如下:

location /img/ {
    root /该图片所在的绝对路径;
}

该请求就会到 root 指定路径去寻找 /img/hello-github.jpg 文件,返回请求。
注意:指定目录的权限

4.2 user

user root;
worker_processes 4;
pid /run/nginx.pid;

user 参数,代表 worker 属于那个用户身份,这个身份牵扯到可以访问那些目录。正如上面的 root 参数指定的路径,如果 worker 没有访问该目录的权限,那么就会返回 403 Forbidden 错误。

4.3 server、server_name、listen

server {
    listen 80;
    server_name hellogithub.com;
    ...
}
  1. server 是配置虚拟主机(Virtual Hosting
  2. server_name是对应的虚拟主机的域名(domain)
  3. listen 是该虚拟主机监听的端口

虚拟主机配置实现了,如何一台计算机实现服务多个域名。

注意:在配置 listen 参数时,确保该端口为打开状态、没有其它进程占用。

4.4 关系

server {
    listen 80;
    ...
    server_name hellogithub.com www.hellogithub.com;
    access_log /path/access.log;
    error_log /path/hellogithub/error.log;

    location / {
        ...
        proxy_pass         http://0.0.0.0:4000;
    }
}
  • access_log:虚拟主机的访问日志

  • error_log:虚拟主机的错误日志
    请求到了目标服务器,Nginx 接受请求,根据 nginx.conf 中的配置的虚拟主机。找到到具体的虚拟主机配置的规则,然后根据虚拟主机的 location 规则,匹配请求的 path 。最后,返回结果(静态资源)或者通过 proxy_pass 参数,反向代理到本机上的处理服务,然后把处理后的结果再通过 nginx 返回结果。

注意:proxy_pass 参数配置的地址末尾不要带 /。例如上面的例子,就不要写成:http://0.0.0.0:4000/
否则会出现:proxy_pass cannot have URI part in location given by regular expression…,错误提示。

4.5 include

http {
    ...

    ##
    # Virtual Host Configs
    ##
    include conf.d/*.conf;
}

意思:引入 conf.d 目录下后缀为 conf 的文件。该目录下存放不同的虚拟主机的相关配置。

目的:为了方便以后的修改配置,使用 include 参数。把不同的虚拟主机的配置放在单独的文件中,达到相互独立,减少出错的可能。

五、问题排查步骤

  • 修改完 nginx.conf 文件后,执行sudo service nginx configtest,检查语法错误。无误后再重启
    nginx。

  • 如果语法出现的错误,查看 sudo vi /var/log/nginx/error.log错误日志分析问题,根据异常信息,搜索问题的解决办法。

  • 语法正确也不一定可以正常启动 nginx(端口被占用),如果启动失败。查看
    sudo vi /var/log/nginx/error.log 错误日志分析问题。

  • nginx 正常启动了,访问地址出现:

  • 无法访问此网站(ERR_NAME_NOT_RESOLVED):检查服务的 80 或 443 端口是否打开。

  • NOT FOUND:检查 location 是否匹配到了请求的 path。

  • 403 Forbidden:检查 root 的文件权限和 user 身份的权限。

六、总结

  • 排查问题的关键,是需要清楚整个流程都经历的那些步骤,逐一进行排查,取保每一步的正确。中间最关键的信息就是 日志中的错误说明。

  • 就像排查
    nginx,可以通过日志,定位到问题是在那一步出错了。如果日志中没有这一次访问的记录,那就需要查看端口是否开放、域名解析是否正确。

  • 首先,清楚整个流程

  • 然后,根据有限的信息,定位问题

  • 最后,分析问题,整理问题的关键字,求教 Google

  • 至此就是我在配置 nginx
    遇到的问题和总结的经验,这些折腾了我半天。所以,记录、整理这些东西希望自己以后遇到这个问题有‘套路’,不至于浪费时间,同样分享给大家,希望能帮到更多的人?。

PS:在我搜索相关资料的时候,我发现如何配置环境的资料,一般都是云服务商(linode、digitalocean)写的最好、最详细、最全。所以,遇到这类问题,可以多去看看他们的帮助文档。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

配置 nginx 遇到错误排查(初级) 的相关文章

随机推荐

  • 【LeetCode 热题 HOT 100-002】两数相加(python)

    题集链接 https leetcode cn problem list 2cktkvj 题目链接 https leetcode cn problems add two numbers favorite 2cktkvj 一 题目 二 代码 解
  • C# winform Panel 获取滚轮事件

    使用 Panel 做为控件容器时 设置 Panel AutoScroll true时 在适当的时候将会出现滚动条 但是只能通过拖动滚动条来调整滚动条的位置 如果想要用鼠标中间键来控制滚动条的位置 可以通过下面几步来完成 1 在构造函数中加上
  • DCGAN、WGAN、WGAN-GP、LSGAN、BEGAN原理总结及对比

    GAN系列学习 2 前生今世 本文已投稿至微信公众号 机器学习算法工程师 欢迎关注 本文是GAN系列学习 前世今生第二篇 在第一篇中主要介绍了GAN的原理部分 在此篇文章中 主要总结了常用的GAN包括DCGAN WGAN WGAN GP L
  • 记一次Vulnstack靶场内网渗透(五)

    实验环境搭建 VMware新建网卡VMnet14 选择仅主机模式 并将网段IP设置为192 168 138 0 然后将Windows 7和Windows 2008绑在这个VMnet14上 除此之外 还需要给Windows 7 新增一个网卡
  • C#实现俄罗斯方块游戏

    还记得小时候经常拿袖珍电子游戏机或者小霸王玩过最多的就是俄罗斯方块 冒险岛 超级玛丽还有魂斗罗之类的 这些游戏由于其中简单易上上手的特点 曾经风靡了全世界 俄罗斯方块的基本规则是移动 旋转和摆放游戏自动输出的各种方块 使之排列成完整的一行或
  • Linux开机&关机

    走进Linux系统 开机登录 开机会启动许多程序 它们在Windows叫做 服务 service 在Linux就叫做 守护进程 daemon 开机成功后 它会显示一个文本登录界面 这个界面就是我们经常看到的登录界面 在这个登录界面会提示用户
  • 关于String内存分配的深入探讨

    2019独角兽企业重金招聘Python工程师标准 gt gt gt public class Test public static final String MESSAGE taobao public static void main St
  • Sqli-labs之Less-34

    Less 34 基于错误 POST 单引号 字符型 addslashes 宽字节注入 这一关是POST型的注入 同样的将post传递过来的内容进行了转义处理 过滤了单引号 反斜杠 有之前的例子我们可以看到 df可以将转义的反斜杠给吃掉 而G
  • 数据结构 十进制和十六进制进制间的相互转换

    一 十进制转十六进制 例题 输入十进制数 654321 输出十六进制数 9FBF1 解题步骤 十进制数对16取余 因为最终结果是从下往上依次书写 说以我们可以利用栈的特性 先进 的后出 将余数存入栈中依次弹出 再将弹出的数进行拼接输出即可
  • C++迭代器-------array的基本用法总结

    基本用法中主要总结有 遍历和比较大小 注意 加上头文件 include
  • 利用python来制作动态二维码

    前言 为什么要学习python 是因为不仅很多工作需要用到python 同时我们可以利用python做很多好玩儿的事儿 今天就来教大家如何利用python制作动态二维码 代码说明 我们以小猪佩奇gif图片为例 如果我们利用的背景图是gif动
  • 工厂实施MES系统可以带来哪些效益?

    众多工厂生产现状 1 设施设备先进 但是管理方式落后 手工管理模式的存在 造成数据的不准确和不完全 没有完全实现信息化管理 2 生产计划协调性差 作业调度困难 生产作业计划主要依据调度员的经验制定 设备利用率低 任务进度监控难 紧急插单普遍
  • C++虚基类

    问题引出 问题 A中数据 在D中保存了两份 虚继承 虚继承的目的是让某个类做出声明 承诺愿意共享它的基类 其中 这个被共享的基类就称为虚基类 Virtual Base Class 虚派生只影响从指定了虚基类的派生类中进一步派生出来的类 它不
  • 扎心!为何HR看了你的简历却不通知面试?

    还只是老老实实地写简历 投简历 默默地等待面试通知 那只有两种可能 你太天真 或者是 你真的很久没有 求职 了 如果你细心观察会发现 当你完成一份简历之后 它的状态也会有变化 然而 却有很多求职者并没有搞清楚这些 状态 到底代表着什么 但小
  • idea 配置 JavaWeb 项目的 tomcat

    目录 第一步 单击 idea 靠右上部位的 添加配置 Add Config Run Config 第二步 点击 添加新 或者图中箭头指向的任意一个地方 第三步 选择 Tomcat 服务器 本地 不是 TomEE 第四步 若以前从未配置 To
  • 使用SARIMA做季节时间序列预测全流程(附MATLAB代码)

    在之前的专栏中我们用ARIMA的方法做了时间序列的趋势性预测 不过我们经常还会遇到一种情况 即某些时间序列中存在明显的周期性变化 这种周期是由于季节性变化 季度 月度等 引起的 如下图所示 为1949年到1960年每月国际航空公司的乘客人数
  • C# pdf文件加数字证书,防篡改

    C 指定文件夹内新创建pdf文件加签数字证书 代码实现 引用 Spire Pdf string files Directory GetFiles Config pdfPath 需加数字证书pdf存放文件夹地址 string filesLis
  • 进程信号生命周期详解

    信号和信号量半毛钱关系都没有 每个信号都有一个编号和一个宏定义名称 这些宏定义可以在signal h中找到 例如其中有定 义 define SIGINT 2 查看信号的机制 如默认处理动作man 7 signal SIGINT的默认处理动作
  • c++自定义类型和预处理

    struct 内部初始化变量时 不能用 struct data int x 12 float f 122 5f int pi x data da cout lt lt da f lt lt endl data dap new data 使用
  • 配置 nginx 遇到错误排查(初级)

    系统版本 ubuntu 14 04 nginx 版本 nginx 1 4 6 Ubuntu 本文不是一步步搭建 nginx 的过程 而是我在使用 nginx 的过程中 整理自己遇到的的一些问题 适用于 nginx 遇到问题 排查问题的 ch