接上篇,铜锭四通后,雪微研究了下nginx配置。
文档有点长,建议阅读时间10分钟。
开启gzip功能,能够将前端传输的数据大小压缩一半甚至更少,降低了带宽要求,让访问更轻、更快,体验很舒服:
gzip on; #开启
gzip_buffers 8 16k;#超过128k的文件不压缩
gzip_comp_level 2;#压缩级别,越大压缩越好,时间也越长,1~10
gzip_min_length 512;#大于512B才压缩
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary off;#在Header里增加“Vary:Accept-Encoding”
gzip_disable "MSIE [1-6]\.";#IE6不压缩
location语法
= 开头表示精确匹配
^~ 开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)
~ 开头表示区分大小写的正则匹配
~* 开头表示不区分大小写的正则匹配
!~和!~* 分别为区分大小写不匹配及不区分大小写不匹配的正则
/ 用户所使用的代理(一般为浏览器)
$http_x_forwarded_for 可以记录客户端IP,通过代理服务器来记录客户端的ip地址
$http_referer 以记录用户是从哪个链接访问过来的
规则匹配的优先级:
1、 先校验 =(精准命中),如果命中,立即返回结果并结束解析过程。
2、 校验普通命中,如果有多个命中,“记录”下来“最长”的命中结果(记录但不结束,最长的为准)。
3、 继续校验正则表达式的解析结果,按配置里的正则表达式顺序为准,由上至下开始匹配,一旦匹配成功到,立即返回结果,并结束解析过程。
4、 普通命中无顺序,是因为按命中的长短来确定。正则命中,要按照顺序,因为是从前入往后命中的。
比较常见的配置,带实例:
一、http 普通、静态的配置
这样如果访问http://localhost 就会默认访问到根目录webroot目录下面的index.html,如果一个网站只是静态页面的话,那么就可以通过这种方式来实现部署。
server { listen 80; server_name localhost; client_max_body_size 1024M; location / { root /webroot; //思路:通过/将所有的请求,转发给root处理 index index.html; }}
二、反向代理
localhost的时候,就相当于访问localhost:8080了
server {
listen 80;
server_name localhost;
client_max_body_size 1024M;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host:$server_port; //思路:通过/,将所有的请求,转发给第3方处理
}
}
反向代理的作用很多。
负载均衡、虚拟主机等,都基于反向代理实现,当然反向代理的功能也不仅仅是这些。
3、Redirect重定向语法
server { listen 80; server_name start.igrow.cn;
index index.html index.php; root html;
if ($http_host !~ "^star\.igrow\.cn#34; {
rewrite ^(.*) http://www redirect;
}}
4、防盗链语法实现
location ~* \.(gif|jpg|png|bmp)$ {
valid_referers none blocked *.ttlsa.com server_names ~\.google\. ~\.baidu\.;
if ($invalid_referer) {
return 403;
}
}
5、根据文件类型设置过期时间
location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ {
if (-f $request_filename) {
//只能是文件,因为这用-f判断了
expires 1h; break;
}}
6、设置图片缓存/过期时间
7、禁止访问前端某个目录
location ~* \.(txt|doc)${root /data/www/wwwroot/linuxtone/test; #所有用户都禁止访问这个目录deny all;}
8、隐藏nginx版本号
通过你所用的nginx版本,找其漏洞,进行攻击你
在http中添加该配置:server_tokens off;
9、配置https的步骤
1、去网上(阿里云或者腾讯云)申请免费证书
2、下载免费证书放到/usr/local/nginx目录下(就是和conf同级,nginx.conf默认的配置文件的上一级)
4、在vhost目录下加入配置文件
server {
listen 443;
server_name lampol.edu0532.cn; #改域名
ssl on;
root /home/www/xcxtp5/public; #改项目路径
ssl_certificate ../certbo/1523694051089.pem; #改证书路径
ssl_certificate_key ../certbo/1523694051089.key; #改私钥路径
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
index index.html index.htm index.php;
autoindex on;
# 伪静态配置
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
}
10、动静分离
设计:动态、静态的文件,请求时匹配不同的目录
当访问gif,jpeg时 直接访问/webroot;,正则自行配置
server {
listen 80;
server_name localhost;
location / {
root /webroot;
index index.html;
}
# 所有静态请求都由nginx处理,存放目录为html
location ~ .(gif|jpg|jpeg|png|bmp|swf|css|js)$ {
root /webroot;
}
# 所有动态请求都转发给tomcat处理
location ~ .(jsp|do)$ {
proxy_pass http://ip:port;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /webroot;
}
}
本文暂时没有评论,来添加一个吧(●'◡'●)