系统版本:ubuntu 14.04,nginx 版本:nginx/1.4.6 (Ubuntu)
本文不是一步步搭建 nginx 的过程,而是我在使用 nginx 的过程中,整理自己遇到的的一些问题。适用于:nginx 遇到问题,排查问题的 checklist
- sudo apt-get update
- sudo apt-get install nginx
注意:用 root 身份安装 nginx
请在执行下面命令时,确保权限正确,统一在命令前加入:
,使用 root 权限操作 nginx。
- sudo
- nginx -v
- service nginx configtest
- service nginx restart
- service nginx stop
- service nginx status
如遇到,启动失败的情况,请查看 nginx 错误日志,日志位于:
- /var/log/nginx/error.log
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.
符号 | 含义 |
---|---|
~ | 区分大小写匹配 |
~* | 不区分大小写匹配 |
!~ 和!~* | 分别为区分大小写不匹配及不区分大小写不匹配 |
^ | 以什么开头的匹配 |
$ | 以什么结尾的匹配 |
\ | 转义字符。可以转. * ? 等 |
* | 代表任意字符 |
:匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配
- location = /
:匹配任何已 / images / 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
- location ^~ /images/
:匹配任何已. gif、.jpg 或 .jpeg 结尾的请求
- location ~* .(gif|jpg|jpeg)$
默认访问请求文件的所在目录。例如访问:
,nginx 中配置如下:
- http://hellogithub.com/img/hello-github.jpg
- location /img/ {
- root /该图片所在的绝对路径;
- }
该请求就会到
指定路径去寻找
- root
文件,返回请求。
- /img/hello-github.jpg
注意:指定目录的权限
- user root;
- worker_processes 4;
- pid /run/nginx.pid;
参数,代表 worker 属于那个用户身份,这个身份牵扯到可以访问那些目录。正如上面的
- user
参数指定的路径,如果 worker 没有访问该目录的权限,那么就会返回
- root
错误。
- 403 Forbidden
- server {
- listen 80;
- server_name hellogithub.com;
- ...
- }
是配置虚拟主机(Virtual Hosting
- server
是对应的虚拟主机的域名(domain)
- server_name
是该虚拟主机监听的端口
- listen
虚拟主机配置实现了,如何一台计算机实现服务多个域名。
注意:在配置
参数时,确保该端口为打开状态、没有其它进程占用。
- listen
- 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
规则,匹配请求的 path 。最后,返回结果(静态资源)或者通过
- location
参数,反向代理到本机上的处理服务,然后把处理后的结果再通过 nginx 返回结果。
- proxy_pass
注意:
参数配置的地址末尾不要带
- proxy_pass
。例如上面的例子,就不要写成:
- /
否则会出现:
- http://0.0.0.0:4000/
,错误提示。
- proxy_pass cannot have URI part in location given by regular expression...
文件后,执行
- nginx.conf
,检查语法错误。无误后再重启 nginx。
- sudo service nginx configtest
错误日志分析问题,根据异常信息,搜索问题的解决办法。
- sudo vi /var/log/nginx/error.log
错误日志分析问题。
- sudo vi /var/log/nginx/error.log
(ERR_NAME_NOT_RESOLVED):检查服务的 80 或 443 端口是否打开。
- 无法访问此网站
:检查
- NOT FOUND
是否匹配到了请求的 path。
- location
:检查
- 403 Forbidden
的文件权限和
- root
身份的权限。
- user
排查问题的关键,是需要清楚整个流程都经历的那些步骤,逐一进行排查,取保每一步的正确。中间最关键的信息就是 日志中的错误说明。
就像排查 nginx,可以通过日志,定位到问题是在那一步出错了。如果日志中没有这一次访问的记录,那就需要查看端口是否开放、域名解析是否正确。
至此就是我在配置 nginx 遇到的问题和总结的经验,这些折腾了我半天。所以,记录、整理这些东西希望自己以后遇到这个问题有'套路',不至于浪费时间,同样分享给大家,希望能帮到更多的人
来源: http://www.cnblogs.com/xueweihan/p/6714415.html