注:本小结基于Ubuntu,但原理适用于所有Linux系统。
概况
安装:sudo apt-get install nginx
安装后得到以下各目录
/usr/sbin/nginx:主程序
/etc/nginx:存放配置文件
/usr/share/nginx:存放静态文件(web默认目录)
/var/log/nginx:存放日志
/etc/init.d/nginx:服务位置
由上可知,Linux系统的配置文件一般放在/etc,日志一般放在/var/log,运行的程序一般放在/usr/sbin或者/usr/bin。
官方文档或者自带的注释都是很好的教程,比如配置文件default中就有很多注释。
配置
/etc/nginx中存放配置文件。
nginx.conf 是主配置文件(include了sites-enabled中的配置)。
sites-enabled可以引用sites-available中的配置(因此更改其中任意一处即可)。
sites-available是一般情况下修改配置的地方。
注意,默认存在default配置文件,因此需要了解配置的合并规则。曾因为新建try配置文件,但是一直失效(之执行了default配置),在这里坑了很久。如果实在搞不清楚,就直接修改default文件吧。
如果在这个文件夹中创建一个配置文件如 test文件(本例未经测试,可能无法覆盖default,仅当参考演示):
server {
listen 80; # 监听80端口
root /srv/awesome/www;
access_log /srv/awesome/log/access_log;
error_log /srv/awesome/log/error_log;
server_name awesome.farmer.com; # 配置域名
# 处理静态文件/favicon.ico:
location /favicon.ico {
root /srv/awesome/www;
}
# 处理静态资源:
location ~ ^\/static\/.*$ {
root /srv/awesome/www;
}
# 处理PHP文件
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index /srv/try/www/index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 动态请求转发到8888端口:
location / {
proxy_pass http://127.0.0.1:8888;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
location配置说明:匹配的是 $request_uri,配置格式如下
location [=|~|~*|^~] uri {
...
}
=开头表示精确匹配
^~ 开头,注意这不是一个正则表达式--它的目的是优于正则表达式的匹配。如果该location是最佳匹配,则不再进行正则表达式检测。
~ 开头表示区分大小写的正则匹配;
~* 开头表示不区分大小写的正则匹配
/ 通用匹配, 如果没有其它匹配,任何请求都会匹配到
!~ && !~*:表示区分大小写不匹配的正则和不区分大小写的不匹配的正则
优先级:(location =) > (location 完整路径) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 部分起始路径) > (/)
1.首先匹配=
2.其次匹配^~
3.再其次按照配置文件的顺序进行正则匹配、
4.最后是交给/进行通用匹配
注意:
当有匹配成功时,立刻停止匹配,按照当前匹配规则处理请求
特别注意: 字符串匹配优先搜索,但是只是记录下最长的匹配 ( 如果 ^~ 是最长的匹配,则会直接命中,停止搜索正则 ),然后继续搜索正则匹配,如果有正则匹配,则命中正则匹配,如果没有正则匹配,则命中最长的字符串匹配.
命令
service nginx restart 重启服务(通用命令)(还可使用的如:start|stop|restart)。
sudo /etc/init.d/nginx reload 重新加载nginx配置文件。
维护
查看系统日志(通用命令,可查看操作记录): journalctl -xe
查看nginx日志文件: 前往/var/log/nginx,以及配置文件中http或server中指定的日志文件。
日常问题
有一次,发现静态文件配置出现404,很不解,然后找到这篇博客 nginx访问静态文件404问题,将监听端口改为81或其他,就可以了,不知道为啥。