标签:nginx
nginx的alias和root的区别
假设,网站的域名为 http://abc.com/,下面分别写两个配置来说明alias和root的区别。
location /123/ {
root /data/wwwroot/abc.com;
}
location /123/ {
alias /data/dir/;
}
上面两段配置,如果访问的链接地址为 http://abc.com/123/1.jpg
第一段会访问服务器上的/data/wwwroot/abc.com/123/1.jpg
第二段配置会访问服务器上的/data/dir/1.jpg
总结一下,用root时,要加上location后面的目录/123/,用alias时,不加/123/目录。
另外还需要注意下面要求:
1) 使用alias时,后面跟的目录结尾必须要加/
2) alias只能在location中使用
nginx的location优先级
在nginx配置文件中,location主要有这几种形式:
1. 正则匹配 location ~ /abc { }
2. 不区分大小写的正则匹配 location ~* /abc { }
3. 匹配路径的前缀,如果找到停止搜索 location ^~ /abc { }
4. 精确匹配 location = /abc { }
5.普通路径前缀匹配 location /abc { }
先说优先级
4 > 3 > 2 > 1 > 5
再来解释一下各个格式
location = / {
# 精确匹配 / ,主机名后面不能带任何字符串
[ configuration A ]
}
location / {
# 因为所有的地址都以 / 开头,所以这条规则将匹配到所有请求
# 但是正则和最长字符串会优先匹配
[ configuration B ]
}
location /documents/ {
# 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
[ configuration C ]
}
location ~ /documents/Abc {
# 匹配任何以 /documents/ 开头的地址,匹配符合以后,还要继续往下搜索
# 只有后面的正则表达式没有匹配到时,这一条才会采用这一条
[ configuration CC ]
}
location ^~ /images/ {
# 匹配任何以 /images/ 开头的地址,匹配符合以后,停止往下搜索正则,采用这一条。
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
# 匹配所有以 gif,jpg或jpeg 结尾的请求
# 然而,所有请求 /images/ 下的图片会被 config D 处理,因为 ^~ 到达不了这一条正则
[ configuration E ]
}
location /images/ {
# 字符匹配到 /images/,继续往下,会发现 ^~ 存在
[ configuration F ]
}
location /images/abc {
# 最长字符匹配到 /images/abc,继续往下,会发现 ^~ 存在
# F与G的放置顺序是没有关系的
[ configuration G ]
}
location ~ /images/abc/ {
# 只有去掉 config D 才有效:先最长匹配 config G 开头的地址,继续往下搜索,匹配到这一条正则,采用
[ configuration H ]
}
再来分析一下A-H配置的执行顺序。
1. 下面2个配置同时存在时
location = / {
[ configuration A ]
}
location / {
[ configuration B ]
}
此时A生效,因为=/优先级高于/
2. 下面3个配置同时存在时
location /documents/ {
[ configuration C ]
}
location ~ /documents/ {
[configuration CB]
}
location ~ /documents/abc {
[ configuration CC ]
}
当访问的url为/documents/abc/1.html,此时CC生效,首先CB优先级高于C,而CC更优先于CB
3. 下面4个配置同时存在时
location ^~ /images/ {
[ configuration D ]
}
location /images/ {
[ configuration F ]
}
location /images/abc {
[ configuration G ]
}
location ~ /images/abc/ {
[ configuration H ]
}
当访问的链接为/images/abc/123.jpg时,此时D生效。虽然4个规则都能匹配到,但^~优先级是最高的。
若^~不存在时,H优先,因为~/images/ > /images/
而/images/和/images/abc同时存在时,/images/abc优先级更高,因为后者更加精准
4. 下面两个配置同时存在时
location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}
location ~ /images/abc/ {
[ configuration H ]
}
当访问的链接为/images/abc/123.jpg时,E生效。因为上面的规则更加精准。
nginx代理一堆域名
需求背景: 内网有一台机器不能连外网,所以没有办法使用yum,考虑过使用iptables nat 转发上网,但因为一些原因,放弃使用。所以想到nginx代理,原理很简单。
A 不能访问 1网站, B可以访问,A和B可以内网通信,所以可以让B作为A的代理。 并且可以限定访问的来源IP,配置文件如下:
server {
listen 80;
server_name aaa.com bbb.com ccc.com ddd.com eee.com;
location / {
resolver 119.29.29.29;
proxy_pass http://$host;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
allow 192.168.5.0/24;
deny all;
}
}
说明:这里的119.29.29.29 为一个DNS的ip,用resolver来指定。
假如B机器内网ip为 192.168.5.11,只需要在A上加一条hosts
192.168.5.11 aaa.com bbb.com ccc.com ddd.com eee.com
nginx 代理tomcat,自定义404页面
需求背景是:
网站基于java,使用tomcat搭建环境,使用nginx作为前端代理。若不做特殊处理,当访问出现404时,将会返回tomcat的404页面,现要求404页面为nginx的自定义页面,并非tomcat自带的404页面。
nginx的配置文件内容如下:
server {
listen 80;
server_name www.xxx.com;
proxy_intercept_errors on;
recursive_error_pages on;
location / {
error_page 404 @404;
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
}
location @404 {
root /tmp/111/;
error_page 404 /404.html;
}
}
其中红色字体的两行配置非常关键,404.html的位置在/tmp/111/404.html。
proxy_intercept_errors on; 当上游服务器响应头回来后,可以根据响应状态码的值进行拦截错误处理,与error_page 指令相互结合。用在访问上游服务器出现错误的情况下。
recursive_error_pages on; 可以让下面的location @404生效。
nginx代理过程中修改user_agent
2020年11月19日
未分类
No Comments
aming
关于User_agent是啥,就不多介绍了,简单说就是客户端的标识,比如chrome浏览器有chrome浏览器的标识,手机客户端也有手机客户端的标识。
有些特殊场景需要指定一个固定的user_agent,来模拟某个客户端。这时候,就可以借助Nginx的反向代理来实现。Nginx配置文件如下:
再来看看访问日志:
已经将user_agent修改为了自定义的了。
nginx