nginx域名转发
<p>场景1:因服务器限制,所以只对外开放了一个端口,但是需要请求不同的外网环境,所以在中转服务器上用nginx做了一次转发</p><p>实现:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">server {
listen 8051;
server_name localhost;
location /license/ {
proxy_pass http://xxx.xxx.xxx.xxx:8058/;
}
location / {
proxy_pass http://</span>xxx.xxx.xxx.xxx<span>:8051/; <br>} <br>}</span></pre>
</div>
<p>特别注意:</p>
<p> 敲黑板:此处如果涉及到文件上传的转发,相应在server_name下添加client_max_body_size 100m;</p>
<p> 域名转发的地址,proxy_pass后面必须跟"/",否则会造成转发不正常</p>
<p> 在nginx中配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径;<br> 如果没有/,表示相对路径,把匹配的路径部分也给代理走。</p>
<p> 假设下面四种情况分别用 http://192.168.1.1/proxy/aerchi.html 进行访问。</p>
<p> 第一种:</p>
<p> location /proxy/ {<br> proxy_pass http://127.0.0.1/;<br> } <br> 代理到URL:http://127.0.0.1/aerchi.html</p>
<p> 第二种(相对于第一种,最后少一个 / )</p>
<p> location /proxy/ {<br> proxy_pass http://127.0.0.1;<br> }<br> 代理到URL:http://127.0.0.1/proxy/aerchi.html</p>
<p> 第三种:</p>
<p> location /proxy/ {<br> proxy_pass http://127.0.0.1/aaa/;<br> }<br> 代理到URL:http://127.0.0.1/aaa/aerchi.html</p>
<p> 第四种(相对于第三种,最后少一个 / ) </p>
<pre><span> <span style="font-size: 14px">location /proxy/ {
proxy_pass http://127.0.0.1/aaa;
}</span></span></pre>
<p> 代理到URL:http://127.0.0.1/aaaaerchi.html<br>原文链接:https://blog.csdn.net/aerchi/java/article/details/84968106</p>
<p> </p>
<p>场景2:因业务需要,一套前段代码需要映射到两个后台地址上,所以需要在接口上进行区分转发,同时转发时需要把区分标志去掉</p>
<p>实现:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">server {
listen 0.0.0.0:8204;
server_namelocalhost;
# 静态页面目录
root E:\xxxxxxx;
# 默认首页
index /index.html;
proxy_set_header Host$http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_cookie_path /* /*;
client_max_body_size 100m;
location ~*/wx/(.*) {#根绝接口是否包含/wx/来区分
# 动态页面,交给tomcat处理
if ( !-e $request_filename) {
proxy_pass http://127.0.0.1:8091/$1?$args;#转到后台时需要把/wx去掉如果不加?$argsget请求会丢失参数
}
}
location / {
# 用户浏览器端的缓存设置
location ~* \.(css|js|jpg|jpeg|gif|png|swf|htm|html|json|xml|svg|woff|ttf|eot|map|ico)$ {
expires -1;
if (-f $request_filename) {
break;
}
}
# 动态页面,交给tomcat处理
if ( !-e $request_filename) {
proxy_pass http://127.0.0.1:8092;
#proxy_cookie_path /* /*;
}
}
error_page 500 502 503 504/50x.html;
location = /50x.html {
root html;
}
}</span></pre>
</div>
<p>特别注意:</p>
<p> 1、 proxy_set_header Host $http_host;<br> 不改变请求头 。<br> 2、proxy_set_header Host host;如果客户端请求头中没有携带这个头部,那么传递到后端服务器的请求也不含这个头部。这种情况下,使用 host;如果客户端请求头中没有携带这个头部,那么传递到后端服务器的请求也不含这个头部。 这种情况下,使用host;如果客户端请求头中没有携带这个头部,那么传递到后端服务器的请求也不含这个头部。这种情况下,使用host变量它 的值在请求包含“Host”请求头时为“Host”字段的值,在请求未携带“Host”请求头时为虚拟主机的主域名;<br> 3、proxy_set_header Host host: host:host:proxy_port;<br> 服务器名可以和后端服务器的端口一起传送:<br> 4、如果某个请求头的值为空,那么这个请求头将不会传送给后端服务器:<br> proxy_set_header Accept-Encoding “”;<br> 5、用户真实的ip地址转发给后端服务器<br> proxy_set_header Host $host;<br> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br> proxy_set_header X-Real-IP $remote_addr;<br> 原文链接:https://blog.csdn.net/Sw_Pro/java/article/details/99679534</p>
<p> </p>
<p>场景3:前段代码用vue实现,vue没有具体的页面,也是通过/xx/xx来访问资源,这时候需要与后台接口进行区分</p>
<p>实现:</p>
<p> 可以通过特殊字符类似“#”来区分,携带#的请求默认是静态资源</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">location ~* \.(#|css|js|jpg|jpeg|gif|png|swf|htm|html|json|xml|svg|woff|ttf|eot|map|ico)$ {
expires -1;
if (-f $request_filename) {
break;
}
}</span></pre>
</div>
<p> </p>
<p>场景4:因服务器限制,数据库访问需要nginx进行转发</p>
<p>实现:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">stream {
upstream cloudsocket {
hash $remote_addr consistent;
server 数据库实际ip:3306 weight=5 max_fails=3 fail_timeout=30s;
}
server {
listen 127.0.0.1:8058; #本机代理端口
proxy_connect_timeout 10s;
proxy_timeout 300s;#设置客户端和代理服务之间的超时时间,如果5分钟内没操作将自动断开。
proxy_pass cloudsocket;
}
}</span></pre>
</div>
<p>特别注意:</p>
<pre><span>stream与http同级,所以不要放到http里 <br></span></pre>
<p>场景5:访问某域名时需要重定向到另一个地址</p>
<p>实现:</p>
<div class="cnblogs_code">
<p>server {<br> listen 7000;<br> server_name localhost;<br> client_max_body_size 100m;<br> <br> location = / {<br> rewrite ^(.*) https://www.baidu.com permanent;<br> }<br> }</p>
</div>
<p>特别注意:</p>
<p>last 本条规则匹配完成后继续向下匹配新的location URI规则<br>break 本条规则匹配完成后终止,不在匹配任何规则<br>redirect 返回302临时重定向<br>permanent 返回301永久重定向</p>
<pre><span> </span></pre>
<p>场景6:rewrite 时,不固定ip和端口,转发到该ip端口下的其他路径下</p>
<p>实现:</p>
<div class="cnblogs_code">
<p>server {<br> listen 7000;<br> server_name localhost;<br> client_max_body_size 100m;<br><br> location = / {<br> rewrite ^(.*) http://$host:$server_port/test permanent;<br> }<br>}</p>
</div>
<p>注意:</p>
<p>$host-------------IP或域名</p>
<p>$server_port---端口</p>
<pre> </pre><br><br>
来源:https://www.cnblogs.com/xiufengd/p/13162044.html
頁:
[1]