LNMP下Nginx.conf常用配置项详解
1、允许跨域
当出现403跨域错误的时候 No 'Access-Control-Allow-Origin' header is present on the requested resource时,
需要给Nginx服务器配置以下响应的header参数以解决跨域问题;
add_header 'Access-Control-Allow-Origin' '*'; // *代表允许任何网址请求 add_header 'Access-Control-Allow-Credentials' 'true'; // 设置是否允许发送 cookies add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS'; // 允许请求的类型
2、Http强制跳转https
方法1,使用return 301重定向:
server{ listen 80; server_name xxx.com; //你的域名 return 301 https://$server_name$request_uri; //重定向 } 或 server{ if ($scheme = http) { return 301 https://$server_name$request_uri; //重定向 } }
方法2,使用rewrite重定向
:
server{ listen 80; server_name xxx.com; //你的域名 rewrite ^(.*)$ https://$host$1 permanent; //重定向 }
对于return
和rewrite
的区别,可以阅读这篇文章:Creating NGINX Rewrite Rules
另外:推荐自动生成正确的 Nginx SSL 配置网站(默认开启了 HSTS ):https://mozilla.github.io/server-side-tls/ssl-config-generator/
3、路由转发Localtion详解
指令作用
匹配指定的请求uri(请求uri不包含查询字符串,如http://localhost:8080/test?id=10,请求uri是/test)
语法形式
location [ = | ~ | ~* | ^~ | @] /uri/ { configuration }
匹配模式及顺序
匹配方式:普通字符串(literal string)和正则表达式(regular expression),其中 ~ 和 ~* 用于正则表达式, 其他前缀和无任何前缀都用于普通字符串。
匹配顺序:先匹配普通字符串,将最精确的匹配暂时存储;
location = /uri =开头表示精确前缀匹配,只有完全匹配才能生效。 location ^~ /uri ^~开头表示普通字符串匹配上以后不再进行正则匹配。 location ~ pattern ~开头表示区分大小写的正则匹配。 location ~* pattern ~*开头表示不区分大小写的正则匹配。 location /uri 不带任何修饰符,表示前缀匹配。 location / 通用匹配,任何未匹配到其他location的请求都会匹配到。 注意:正则匹配会根据匹配顺序,找到第一个匹配的正则表达式后将停止搜索。普通字符串匹配则无视顺序,只会选择最精确的匹配。
常用配置指令alias、root、proxy_pass
1、alias:别名配置,用于访问文件系统,在匹配到location配置的URL路径后,指向alias配置的路径,如:
location /test/ {
alias /usr/local/; }
请求/test/1.jpg(省略了协议和域名),将会返回文件/usr/local/1.jpg。
如果alias配置在正则匹配的location内,则正则表达式中必须包含捕获语句(也就是括号()),而且alias配置中也要引用这些捕获值。如:
location ~* /img/(.+\.(gif|png|jpeg)) { alias /usr/local/images/$1; }
请求中只要能匹配到正则,比如/img/flower.png 或者 /resource/img/flower.png,都会转换为请求/usr/local/images/flower.png。
2、root:根路径配置,用于访问文件系统,在匹配到location配置的URL路径后,指向root配置的路径,并把请求路径附加到其后,如:
location /test/ { root /usr/local/; }
请求/test/1.jpg,将会返回文件/usr/local/test/1.jpg。
3、proxy_pass——反向代理配置,用于代理请求,适用于前后端负载分离或多台机器、服务器负载分离的场景,在匹配到location配置的URL路径后,转发请求到proxy_pass配置额URL,是否会附加location配置路径与proxy_pass配置的路径后是否有"/"有关,有"/"则不附加,如:
location /test/ { proxy_pass http://127.0.0.1:8080/; }
请求/test/1.jpg,将会被nginx转发请求到http://127.0.0.1:8080/1.jpg(未附加/test/路径)。
4、Nginx并发、连接数查看方法
通过web界面查看时Nginx需要开启status模块,也就是安装Nginx时加上 --with-http_stub_status_module,然后配置Nginx.conf,在server点里面加入如下内容
location /status {
access_log /usr/local/nginx/logs/status.log;
auth_basic "NginxStatus";
配置完后重新启动Nginx后,我们可以通过浏览器访问http://localhost/status ,如图:
参数解析:
参数 | 释义 |
---|---|
Active connections | 当前 Nginx 正处理的活动连接数 |
server accepts handled requests | 总共处理了467079 个连接 , 成功创建 467079次握手,总共处理了5387526个请求 |
Reading | Nginx读取到客户端的 Header 信息数 |
Writing | Nginx返回给客户端的 Header 信息数 |
Waiting | 开启 keep-alive 的情况下,这个值等于 active - (reading + writing),意思就是 Nginx 已经处理完正在等候下一次请求指令的驻留连接 |