结构
最外层包裹Http,
头部设置gzip,cache-corntrol等信息
然后内部每个域名对应一个server
http{
gzip on; gzip_min_length 2k; gzip_buffers 4 16k; gzip_http_version 1.0; gzip_comp_level 3; gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; gzip_vary on;
add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers X-Requested-With; add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
server{
listen 80 ; //一般http的对外暴露的接口
root /usr/share/nginx ;//设置的目录 (当是对端口进行域名代理的时候 可以不用);
}
}
1:根域名和二级域名
@和www都要配
2:配置PHP环境
3:配置目录访问
使用alias时,目录名后面一定要加"/" 访问时会被替换掉 而root可不加
location /name{
alias /实际访问的目录/
try_files $uri $uri/ /实际文件夹名称/index.html;
}
如果当前目录下 则不需要alias
4:配置端口访问和正向代理
listen 80;
server_name node.sss.com;
location /second/ {
proxy_pass http://127.0.0.1:2222/;
proxy_redirect off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
看是否带uri
如果只是域名+端口 则为不带uri 为添加
带/或者之后有啥对象 就是替换
proxy_pass 后面带/代表根目录 不会带上location的
不带/代表相对路径 会在路径前面加上
5:缓存设置
规则等:
一 Nginx的location语法
1location [=|~|~*|^~] /uri/ { … }
= 严格匹配。如果请求匹配这个location,那么将停止搜索并立即处理此请求
~ 区分大小写匹配(可用正则表达式)
~* 不区分大小写匹配(可用正则表达式)
!~ 区分大小写不匹配
!~* 不区分大小写不匹配
^~ 如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式
示例1:
location / { }
匹配任意请求
示例2:
location ~* .(gif|jpg|jpeg)$ {
rewrite .(gif|jpg|jpeg)$ /logo.png;}
不区分大小写匹配任何以gif、jpg、jpeg结尾的请求,并将该请求重定向到 /logo.png请求
示例3:
location ~ ^.+\.txt$ {
root /usr/local/nginx/html/;}
区分大小写匹配以.txt结尾的请求,并设置此location的路径是/usr/local/nginx/html/。也就是以.txt结尾的请求将访问/usr/local/nginx/html/ 路径下的txt文件
二 alias与root的区别
root 实际访问文件路径会拼接URL中的路径
alias 实际访问文件路径不会拼接URL中的路径
示例如下:
location ^~ /sta/ {
alias /usr/local/nginx/html/static/;
}
请求:http://test.com/sta/sta1.html
实际访问:/usr/local/nginx/html/static/sta1.html 文件
location ^~ /tea/ {
root /usr/local/nginx/html/; }
请求:http://test.com/tea/tea1.html
实际访问:/usr/local/nginx/html/tea/tea1.html 文件
三 last 和 break关键字的区别
(1)last 和 break 当出现在location 之外时,两者的作用是一致的没有任何差异
(2)last 和 break 当出现在location 内部时:
last 使用了last 指令,rewrite 后会跳出location 作用域,重新开始再走一次刚才的行为
break 使用了break 指令,rewrite后不会跳出location 作用域,它的生命也在这个location中终结
四 permanent 和 redirect关键字的区别
rewrite … permanent 永久性重定向,请求日志中的状态码为301
rewrite … redirect 临时重定向,请求日志中的状态码为302
五 综合实例
将符合某个正则表达式的URL重定向到一个固定页面
比如:我们需要将符合“/test/(\d+)/[\w-\.]+” 这个正则表达式的URL重定向到一个固定的页面。符合这个正则表达式的页面可能是:http://test.com/test/12345/abc122.html、http://test.com/test/456/11111cccc.js等
从上面的介绍可以看出,这里可以使用rewrite重定向或者alias关键字来达到我们的目的。因此,这里可以这样做:
(1)使用rewrite关键字:
location ~ ^.+\.txt$ {
root /usr/local/nginx/html/;}
location ~* ^/test/(\d+)/[\w-\.]+$ { rewrite ^/test/(\d+)/[\w-\.]+$ /testpage.txt last;
}
这里将所有符合条件的URL(PS:不区分大小写)都重定向到/testpage.txt请求,也就是 /usr/local/nginx/html/testpage.txt 文件
(2)使用alias关键字:
location ~* ^/test/(\d+)/[\w-\.]+$ { alias /usr/local/nginx/html/static/sta1.html;
}
~ 和 ~* 为正则location
=、^~、@和无任何前缀的都属于普通location,另外,@是用作服务端内部的一种转发行为,很少用,在此不做讨论。
先普通,再正则
普通location之间的匹配顺序:按最大前缀匹配 //越多越好
如location /a/{},location /a/b/ {},请求 http://a/b/c.html 匹配的是 location /a/b/ {}
正则location之间的匹配顺序:按配置文件中的物理顺序匹配,只要匹配到一条正则,就不再考虑后面的
若普通location匹配到 精确匹配= 或 非正则匹配 ^~, 则不再进行后续的正则匹配
普通location与正则location之间的匹配结果选择
普通location先匹配,匹配到了结果,只是一个临时结果;
会继续正则location的匹配,
如果匹配到正则,则用匹配到的正则结果;
如果没有匹配到正则,则继续用普通匹配的那个结果
综上,常规的顺序是匹配完普通location,还要继续匹配正则location,但是,也可以告诉nginx,匹配到了普通location,就不要再搜索匹配正则location了,通过在普通location前面加上^~符号,^表示非,~表示正则,^~就是表示不要继续匹配正则。
除了^~,=也可阻止nginx继续匹配正则,区别在于^~依然遵循最大前缀匹配规则,而=是严格匹配
普通优先 匹配到 则不匹配正则
正则如果匹配到就结束 不再继续匹配