Nginx是一款轻量级的Web服务器、反向代理服务器。
正向代理与反向代理
-
正向代理隐藏真实客户端
-
反向代理隐藏真实服务端
正向代理:
反向代理:
图片来自:反向代理为何叫反向代理? - TommyyZ的回答
配置文件位置
通常根配置文件在/etc/nginx/nginx.conf
,里面引入了/etc/nginx/conf.d/*.conf
配置文件,以及/etc/nginx/sites-enabled/
目录的所有文件,sites-enabled
目录中通常存放软链接,指向/etc/nginx/sites-avaliable/
目录的文件。
重启服务应用配置
改完配置文件要重启Nginx服务,Ubuntu中命令如下。配置文件有问题会导致Nginx无法启动并报错。
1 | sudo service nginx restart |
配置文件格式
/etc/nginx/nginx.conf
文件示例如下。HTTP服务器的主要配置都在http { * }
中,http中用include
引入了conf.d
和sites-enabled
目录的配置。
注意,一行配置的末尾需要加分号。
1 | user www-data; |
Server基本参数
http{}
中可包含多个server{}
,每个server是一个虚拟服务器(Virtual Server),服务器对应不同的域名 / 子域名 / 端口。
1 | http { |
域名重定向的配置
301跳转临时重定向
1 | server { |
永久重定向
1 | server { |
location
server中可以有多个location,表示不同的路径。
location支持的语法 location [=~~*^~@] pattern { ... }
=
,完全匹配~
,区分大小写的正则匹配~*
,不区分大小写的正则匹配^~
,前缀匹配- 没有修饰符:前缀匹配
多条 location 规则优先级:
- 精确匹配:
=
- 前缀匹配:
^~
(立刻停止后续的正则搜索) - 正则匹配:
~
或~*
(按文件中定义的顺序依次搜索) - 不带修饰符的前缀,且优先匹配更长更精确的,和定义的先后顺序无关
1 | server { |
参考:
root与alias
可以在location中用root和alias配置静态文件服务器。
1 | location / { |
1 | location / { |
两者对比见表。
-
root
alias
配置 location /loc/
root /www/;
alias /www/;
url path= /loc/test
时访问的文件
/www/loc/test
/www/test
解释
root + path
root + (path - location)
try_files
一个location中可以通过try_files指定依次尝试多个位置。
例如下面的写法,php文件没找到就会返回404页面。
1 | location ~ \.php$ { |
单页应用的配置(React、Vue)
单页应用和静态文件服务器类似,区别在于URL中有path但是没有匹配到文件时,继续尝试index.html文件,否则会产生404。
1 | server { |
path转发到端口
1 | server { |
PHP的配置
将xxx.php
请求转发到FastCGI服务器php7.2-fpm
模块。
fastcgi_pass
有两种配置方式,一种是指定sock文件,例如fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
;另一种是指定端口号,例如fastcgi_pass 127.0.0.1:9000;
fastcgi_param
指定了PHP脚本文件名,其中$document_root
表示root所在目录,即location或者server中指定的root。- php文件放在
/www/php/
目录下,访问www.my-domain.com/test.php
时执行的是/www/php/test.php
文件。
1 | location ~ \.php$ { |
error_page与错误页面指定
1 | server { |
expires与过期时间指定
1 | location ~ .*\.(jscss)$ { |