包括常用的一些 Nginx 示例和使用技巧,如果你在使用中遇到问题,欢迎去提 Issue 。
Nginx 状态码配置和错误文件
如:
#error_page配置小提示
注意 error_page
配置时加 = 和不加 = 的区别,加了 = 表示响应为指定的 http status code
,默认为 200,不加 = 为原错误的状态码~
这样就可以根据自己需求配置错误页为指定的状态码,因为非 200 的状态码可能会被浏览器拦截。
主域301重定向
你的网站可能有多个域名访问,比如:www.xuexb.com
、xuexb.com
等,设置主域意思是不管用户输入哪个域名,都会 301
重定向到主域上,设置主域可以对 SEO 更友好,比如:
以xuexb.com为主域
配置文件核心:
Node.js 反向代理
服务端如果使用nodejs
运行服务,由于端口不能同时多个服务占用,而服务器中可能又是多个网站,那么可以使用 Nginx 做反向代理,比如有这些网站域名和端口:
当然一个服务器上的网站可能还有更多,可以通过配置 Nginx 转发来代理这些端口分发,如:
配置之后,比如你网站根目录里有 index.html
文件,访问 url
如:
配置图片防盗链
防盗链是指当图片不是自己网站打开时返回 403 或者指定图片,是通过请求的来路判断是否是自己的站点来设置响应。
valid_referers none | blocked | server_names | string
none
:表示没有来路
blocked
:表示有来路
server_names
:来路里包含当前域名
string
:(忽略端口)
以上参数可以叠加一起使用。
配置 HTTPS
首先配置支持 HTTPS 必须让 Nginx 开启 http_ssl_module
模块,点击查看nginx编译安装参数 ,可以使用nginx -V
查看是否开启TLS SNI support enabled
。
购买/生成 SSL 证书,可以使用免费的证书,比如:Let’s Encrypt,免费好用的 HTTPS 证书 。
注意,这里证书的格式是 .crt
的。
#配置后的访问规则
#强烈推荐
使用 https://github.com/Neilpang/acme.sh 支持泛域名证书申请了,好赞。
配置泛域名转发
有的时候,我们需要配置一些自定义的子域名,如:
xuexb.user.demo.com
a01.user.demo.com
这时候就需要域名的 DNS 解析一个泛域名 *.user.demo.com
到服务器,Nginx 可以配置如下:
#子域名转发到子目录
以上配置表示:
xuexb.user.demo.com/path?a=1
→ 127.0.0.1:8080/xuexb/path?a=1
a01.user.demo.com/path?a=1
→ 127.0.0.1:8080/a01/path?a=1
这样后端就可以根据子目录解析不同的规则,甚至 Nginx 可以再进行链接重写。
#子域名配置不同的目录
以上配置可以把不同的子域名分发到不同的目录中,做到路径分离的功能,如:
xuexb.user.demo.com
→ /home/user/wwwroot/user/xuexb
;
a01.user.demo.com
→ /home/user/wwwroot/user/a01
;
配置浏览器缓存
使用 expires
参数。
#不缓存
输出Response Headers:
Cache-Control:no-cache
当文件没有变更时会返回 304 ,有变更时会是 200 ,如果强制命中 200 可以再添加: if_modified_since off;
忽略 Request Headers 里的 If-Modified-Since
字段。
1d为1天,单位如下:
ms milliseconds
s seconds
m minutes
h hours
d days
w weeks
M months,30 days
y years,365 days
如果希望最大缓存可以:
输出Response Headers:
Cache-Control:max-age=315360000
#根据链接设置缓存时间
配置默认主页、目录浏览
设置默认主页
直接可以使用目录形式打开的页面称为默认主页,一般常见的有: index.html
、index.htm
、index.php
这些,要吧通过配置来完成,如:
#设置目录浏览
当一个目录内没有默认主页的文件时,直接访问目录会报 403 Forbidden
错误,而启用目录浏览功能后可以直接列出当前目录下的文件、文件夹,如:
但多 autoindex
相关可官方文档: http://nginx.org/en/docs/http/ngx_http_autoindex_module.html
注意,线上运行环境最好别开启该配置,因为这将直接暴露你的文件~