[Python Web]配置 nginx 遇到错误排查(初级)
配置 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。
- 查看 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 正则表达式匹配
符号 | 含义 |
---|---|
~ | 区分大小写匹配 |
~* | 不区分大小写匹配 |
!和!* | 分别为区分大小写不匹配及不区分大小写不匹配 |
^ | 以什么开头的匹配 |
^~ | 表示已某常规字符串开头,不是正则表达式 |
$ | 以什么结尾的匹配 |
/ | 表示通用匹配 |
\ | 转义字符。可以转. * ?等 |
* | 代表任意字符 |
= | 表示精确匹配,如location = / ,表示只有域名的情况 |
3.2 例子
location = /
:匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配location ^~ /images/
:匹配任何已/images/开头的任何查询并且停止搜索。任何正则表达式将不会被测试。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 Hostingserver_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
参数。把不同的虚拟主机的配置放在单独的文件中,达到相互独立,减少出错的可能。
五、问题排查步骤
- 修改完
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 遇到的问题和总结的经验,这些折腾了我半天。所以,记录、整理这些东西希望自己以后遇到这个问题有‘套路’,不至于浪费时间,同样分享给大家,希望能帮到更多的人
[Python Web]配置 nginx 遇到错误排查(初级)的更多相关文章
- NGINX 502错误排查(转)
一.NGINX 502错误排查 NGINX 502 Bad Gateway错误是FastCGI有问题,造成NGINX 502错误的可能性比较多.将网上找到的一些和502 Bad Gateway错误有关 ...
- java web程序 jdbc连接数据库错误排查方法
学习jsp.我遇到了麻烦,我总是看不懂500错误,因为每次都显示整个页面的错误,都是英文 我看不懂,后来,把他弄烦了,我也烦了,比起学习java.那个异常可以很简单的就知道.现在解决 了第一个问题,5 ...
- Nginx+uWSGI+Django+Python+ MySQL 搭建可靠的Python Web服务器
一.安装所需工具 yum -y install gcc gcc-c++ rpm-build mysql* libtool-ltdl* libtool automake autoconf libtool ...
- virtualenv 环境下 Nginx + Flask + Gunicorn+ Supervisor 搭建 Python Web
在这篇文章里,我们将搭建一个简单的 Web 应用,在虚拟环境中基于 Flask 框架,用 Gunicorn 做 wsgi 容器,用 Supervisor 管理进程,然后使用 Python 探针来监测应 ...
- 快速部署Python应用:Nginx+uWSGI配置详解
在PHP里,最方便的就是deployment了,只要把php文件丢到支持PHP的路径里面,然后访问那个路径就能使用了:无论给主机添加多少PHP应用,只要把目录改好就没你的事了,完全不用关心php-cg ...
- Ubuntu+Django+Nginx+uWSGI+Mysql搭建Python Web服务器
Ubuntu+Django+Nginx+uWSGI+Mysql搭建Python Web服务器 闲着无聊的时候部署了一个Django项目玩,用vm虚拟机部署的. 准备工作 我使用的系统是Ubuntu16 ...
- 高性能Web服务器Nginx的配置与部署研究(7)核心模块之主模块的非测试常用指令
1. error_log 含义:指定存储错误日志的文件 语法:error_log <file> [debug|info|notice|warn|error|crit] 缺省:${prefi ...
- Atitit.python web环境的配置 attilax 总结
Atitit.python web环境的配置 attilax 总结 1. 下载modpython/1 1.1. 安装python2.5.11 1.2. 安装modpython1 2. 设置py文件的u ...
- nginx+gunicorn/uwsgi+python web 的前世今生
我们在部署 flask.django 等 python web 框架时,网上最多的教程就是 nginx+gunicorn/uwsgi 的部署方式,那为什么要这么部署呢,本文就来系统地解释这个问题. 必 ...
随机推荐
- 第33篇 js 常用简单的写法
1.取整 取整可以使用'~~'相当于Math.floor() ~~1.5=1; 2.判断为空或者undefine时赋一个自定义的值 var obj={a:"111",b:" ...
- JavaScript基础——变量、语句、注释
一.变量的命名规则 1.变量名由数字.字母.下划线组成 2.变量名的首字母不能是数字,只能是字母或者下划线 3.不能使用关键字和保留字作为变量名 4.变量严格区分大小写,例如在JavaScript中o ...
- AlloyTouch之无限循环select插件
写在前面 当滚动的内容很多,比如闹钟里设置秒,一共有60项.让使用者从59ms滚回01ms是一件很痛苦的事情,所以: 在列表项太多的情况下,我们希望能够有个无限循环的滚动.00ms和01ms是无缝链接 ...
- 2017-3-2 C#链接数据库实现登陆
只是链接一个数据库就有好多的知识:) 实际操作下来,主要是两种登陆方式: 1.Windows的身份验证: 2.Sql Sever的身份验证: 两种的方法不同,但是主要是通过复制创建数据库的字符串来链接 ...
- The Art of Prolog:Advanced Programming Techniques【译文】
申明:此文为译文,仅供学习交流试用,请勿用作商业用途,造成一切后果本人概不负责,转载请说明.本人英语功力尚浅,翻译大多借助于翻译工具,如有失误,欢迎指正. 逻辑程序简介 逻辑程序是一组公理或规则,定义 ...
- 咖啡师之路:第一日一杯Espresso
代码敲累了.产品要发布了.熬夜啊加班啊. 精神完全不在状态. 咋办--- 咋办--- 咋办---! 来一杯Espresso浓缩咖啡.各位码农,码神们的必备良品! 咖啡每天要2-3杯,不管是速溶还是现磨 ...
- 或许是介绍Android Studio使用Git最详细的文章
欢迎访问我的个人博客转发请注明出处:http://www.wensibo.top/2017/03/12/GitOnAS/ 前言 本文较长,图片很多很多,流量党慎入 使用Git已经有一段时间了,但是之前 ...
- [.net 面向对象程序设计深入](24)实战设计模式——策略模式(行为型)
[.net 面向对象程序设计深入](24)实战设计模式——策略模式(行为型) 1,策略模式定义 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它 ...
- ViewPager详解
一.ViewPager简介 ViewPager 如其名所述,是负责翻页的一个 View.准确说是一个 ViewGrop,包含多个 View 页,在手指横向滑动屏幕时,其负责对 View 进行切换.为了 ...
- Android中的WebView实战详解(二)
四.如何用WebView下载软件? 四.如何用WebView下载软件? public class MainActivity extends AppCompatActivity { private We ...