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

系统版本: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。

  1. 查看 nginx 版本:nginx -v
  2. 检查配置语法是否正确:service nginx configtest
  3. 重启:service nginx restart
  4. 停止:service nginx stop
  5. 查看状态:service nginx status

如遇到,启动失败的情况,请查看 nginx 错误日志,日志位于:/var/log/nginx/error.log

三、nginx 正则表达式匹配

location 支持的正则规则,注意:使用正则需要谨慎,确定正则的正确性。

容易出现:因为错误的正则,导致 NOT FOUNDThe requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.

3.1 正则表达式匹配

符号 含义
~ 区分大小写匹配
~* 不区分大小写匹配
!和!* 分别为区分大小写不匹配及不区分大小写不匹配
^ 以什么开头的匹配
^~ 表示已某常规字符串开头,不是正则表达式
$ 以什么结尾的匹配
/ 表示通用匹配
\ 转义字符。可以转. * ?等
* 代表任意字符
= 表示精确匹配,如location = / ,表示只有域名的情况

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;
...
}
  • server 是配置虚拟主机(Virtual Hosting
  • server_name是对应的虚拟主机的域名(domain)
  • 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 参数。把不同的虚拟主机的配置放在单独的文件中,达到相互独立,减少出错的可能。

五、问题排查步骤

  1. 修改完 nginx.conf 文件后,执行sudo service nginx configtest,检查语法错误。无误后再重启 nginx。
  2. 如果语法出现的错误,查看 sudo vi /var/log/nginx/error.log 错误日志分析问题,根据异常信息,搜索问题的解决办法。
  3. 语法正确也不一定可以正常启动 nginx(端口被占用),如果启动失败。查看 sudo vi /var/log/nginx/error.log 错误日志分析问题。
  4. nginx 正常启动了,访问地址出现:
    • 无法访问此网站(ERR_NAME_NOT_RESOLVED):检查服务的 80 或 443 端口是否打开。
    • NOT FOUND:检查 location 是否匹配到了请求的 path。
    • 403 Forbidden:检查 root 的文件权限和 user 身份的权限。

六、总结

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

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

  • 首先,清楚整个流程
  • 然后,根据有限的信息,定位问题
  • 最后,分析问题,整理问题的关键字,求教 Google

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

[Python Web]配置 nginx 遇到错误排查(初级)的更多相关文章

  1. NGINX 502错误排查(转)

    一.NGINX 502错误排查 NGINX 502 Bad Gateway错误是FastCGI有问题,造成NGINX 502错误的可能性比较多.将网上找到的一些和502 Bad Gateway错误有关 ...

  2. java web程序 jdbc连接数据库错误排查方法

    学习jsp.我遇到了麻烦,我总是看不懂500错误,因为每次都显示整个页面的错误,都是英文 我看不懂,后来,把他弄烦了,我也烦了,比起学习java.那个异常可以很简单的就知道.现在解决 了第一个问题,5 ...

  3. Nginx+uWSGI+Django+Python+ MySQL 搭建可靠的Python Web服务器

    一.安装所需工具 yum -y install gcc gcc-c++ rpm-build mysql* libtool-ltdl* libtool automake autoconf libtool ...

  4. virtualenv 环境下 Nginx + Flask + Gunicorn+ Supervisor 搭建 Python Web

    在这篇文章里,我们将搭建一个简单的 Web 应用,在虚拟环境中基于 Flask 框架,用 Gunicorn 做 wsgi 容器,用 Supervisor 管理进程,然后使用 Python 探针来监测应 ...

  5. 快速部署Python应用:Nginx+uWSGI配置详解

    在PHP里,最方便的就是deployment了,只要把php文件丢到支持PHP的路径里面,然后访问那个路径就能使用了:无论给主机添加多少PHP应用,只要把目录改好就没你的事了,完全不用关心php-cg ...

  6. Ubuntu+Django+Nginx+uWSGI+Mysql搭建Python Web服务器

    Ubuntu+Django+Nginx+uWSGI+Mysql搭建Python Web服务器 闲着无聊的时候部署了一个Django项目玩,用vm虚拟机部署的. 准备工作 我使用的系统是Ubuntu16 ...

  7. 高性能Web服务器Nginx的配置与部署研究(7)核心模块之主模块的非测试常用指令

    1. error_log 含义:指定存储错误日志的文件 语法:error_log <file> [debug|info|notice|warn|error|crit] 缺省:${prefi ...

  8. Atitit.python web环境的配置 attilax 总结

    Atitit.python web环境的配置 attilax 总结 1. 下载modpython/1 1.1. 安装python2.5.11 1.2. 安装modpython1 2. 设置py文件的u ...

  9. nginx+gunicorn/uwsgi+python web 的前世今生

    我们在部署 flask.django 等 python web 框架时,网上最多的教程就是 nginx+gunicorn/uwsgi 的部署方式,那为什么要这么部署呢,本文就来系统地解释这个问题. 必 ...

随机推荐

  1. 第十三篇 一个安装、管理windows服务的桌面程序

    在网上看到一个修改程序入口的程序去把windows 服务修改成控制台的程序,然后利用控制台的程序把服务安装和管理,也想起自己原来也写了一个对windows 报务管理的程序,不过是winform的.   ...

  2. AR入门系列-03-在unity中将调试好的Vuforia项目导出为APK

    先设置build settings 选中Android后点击Player Settings Product Name设置安装后的Android程序的名字 Bundle Identifier 设置apk ...

  3. Python 3中字符串可以被改变吗?

    Python 3中字符串可以被改变吗? 字符串有改变这个方法的:replace,比如: a = 'lkjhgfdsa' a.replace(') '123kjhgfdsa' #返回结果 从上面这个例子 ...

  4. 关于Xmanager使用问题的总结

    做大数据的人对Xmanager这类远程连接工具应该都不陌生,我在使用Xmanager时遇到了一些问题并经过google和亲测解决,写在这里与大家分享. 1. [问题描述] 在windows上使用Xma ...

  5. Eclipse的Spring IDE插件的安装和使用

    Spring IDE是Spring官方网站推荐的Eclipse插件,可提供在研发Spring时对Bean定义文件进行验证并以可视化的方式查看各个Bean之间的依赖关系等. 安装 使用Eclipse M ...

  6. vSphere在RedHat6.0上搭建Oracle 11g R2 RAC环境

    一.前期准备工作 1.1 为方便操作,装完系统后我们先安装Vmware Tools: 1.1.1.安装工具 在VMware的菜单栏上选择"虚拟机/安装虚拟机工具(VM/Install VMw ...

  7. dfs算法

    一般bfs算法都是使用递归 //下面简单的代码 visited[Max]; dfs(_graph g,int vo){ print(vo); visited[vo]=1 for(int i=0;i&l ...

  8. UML软件方法大纲

    利用周末的时间读了潘加宇的<软件方法(上)>,希望梳理清楚UML的知识脉络: 工作流 子流程 内容 备注 建模和uml   利润=需求-设计   愿景   缺乏清晰.共享的愿景往往是项目失 ...

  9. 分享一些自己写的前端库,并骗骗 star(库都是在实际项目中大量运用过的)

    最近一两年在一些项目上,通过实际需求出发,编写了一些库在项目中使用,现在将这些项目都稍微整理了一下开源了出来,也许也有刚好能够你也用得上的,顺便也骗一下star.均在项目的README中加了相关的说明 ...

  10. Java基础一:面向对象的特征

    经过16年校招,自己在Java基础方面也算有了一个质的飞跃,从原来知其然,到现在知其所以然,现将学习心得总结于此. 首先需要知道类和对象是什么? 维基百科定义类为: an extensible pro ...