下面记录 Nginx 在使用过程中遇到的“基本”操作。
修改配置文件、测试重启
Nginx 首先检查的配置文件在 /etc/nginx/nginx.conf
。在这个文件中如果有如下内容:
1 | include /etc/nginx/conf.d/*.conf; |
那么也会检查 /etc/nginx/conf.d/
下的所有 conf
文件。本着干净的原则,我们推荐在 nginx.conf
加入 include
语句,然后在 conf.d
下按域名创建自己的 conf
配置文件。
修改配置文件以后,Nginx 并不是即时读取配置的,需要使用 reload 命令才能加载配置。
1 | nginx -s reload |
也可以直接重启 Nginx 服务。
1 | systemctl restart nginx |
如果配置有错误,Nginx 就会启动失败,宕机。为了保证 Nginx 服务器能平稳运行,不宕机,我们推荐使用以下命令而不是尝试重启的形式检查错误:
1 | nginx -t |
给全站添加 SSL 证书
请看另一篇博客。
网页转发
隐性转发/反向代理
这里的情形是:用户访问 https://cloud.example.com
时,服务器将其跳转到 127.0.0.1:8080
,地址栏仍然显示 https://cloud.example.com
。
首先要将域名 cloud.example.com
以 A
的形式指向你的服务器 ip(也就是 example.com
的服务器)。
然后在服务器上新建文件 \etc\nginx\conf.d\cloud.example.com
(习惯用网站命名配置文件),然后加入以下内容:
1 | server { |
- 这里默认你已经配置好了
https
以及http
转发到https
的操作。如果不想使用 https,将第二行修改为listen 80;
即可。配置 https 请看另一篇博客。 - 第三行的
server_name
不限形式,可以使用通配符、正则表达式,还可以使用.example.com
的形式匹配example.com
及其所有子域名。更多细节可以看 [server_name 的官方文档] - [server_name 的官方文档]:(http://nginx.org/en/docs/http/server_names.html)
- 也可以转发到别的网址,但是貌似不能转发到
https
,并且有些网站可能限制转发。
显性转发
这里的情形是:用户访问 https://cloud.example.com
时,服务器服务器将其跳转到 https://baidu.com/
,地址栏显示 https://baidu.com/
。
1 | server { |
这种方法也可以转发到别的网址,无限制。(顺便一说,这也可以在对应网页放一个 html 转发实现,可以不借助 nginx)
识别路径和参数并转发
这里我们讨论更复杂的显性转发情况。方便起见,用表格进行说明:
用户输入的网址 | 转发后的网址 |
---|---|
https://www.lyh543.cn/ |
https://blog.lyh543.cn/ |
https://www.lyh543.cn/git |
https://blog.lyh543.cn/Linux/Git/ |
https://www.lyh543.cn/linux |
https://blog.lyh543.cn/Linux/linux-daily-command/ |
https://www.lyh543.cn/<其他参数> |
https://blog.lyh543.cn/<其他参数> |
我使用的配置文件如下:
1 | server{ |
注意到最后的 $request_uri
是个很好用的东西。除此之外,我们可以把任意一个 url
拆分为 $scheme://$host$request_uri
。
具体地,对于访问链接 https://blog.lyh543.cn/nginx/
,我们有:
参数名 | 实际意义 |
---|---|
$scheme |
https |
$host |
blog.lyh543.cn |
$request_uri |
/nginx/ |
按这种方法,很容易写出 http
强制跳 https
的配置文件:
1 | server { |
显示某路径下 index.html
这里的情形是:用户访问 https://example.com/
时,服务器显示 /path/to/index.html
的内容。
1 | server { |