您的位置:首页 > 服务器 > > 正文

nginx代理转发域名(Nginx域名转发使用场景代码实例)

更多 时间:2022-03-28 09:50:02 类别:服务器 浏览量:186

nginx代理转发域名

Nginx域名转发使用场景代码实例

场景1:因服务器限制,所以只对外开放了一个端口,但是需要请求不同的外网环境,所以在中转服务器上用nginx做了一次转发

实现:

  • server {
     listen  8051;
     server_name localhost;
     
     location /license/ {
          proxy_pass http://xxx.xxx.xxx.xxx:8058/;
     }
     
     location / {
          proxy_pass http://xxx.xxx.xxx.xxx:8051/;  } }
    
  • 特别注意:

      敲黑板:此处如果涉及到文件上传的转发,相应在server_name下添加client_max_body_size 100m;

      域名转发的地址,proxy_pass后面必须跟"/",否则会造成转发不正常

      在nginx中配置proxy_pass代理转发时,如果在proxy_pass后面的url加/,表示绝对根路径;
      如果没有/,表示相对路径,把匹配的路径部分也给代理走。

      假设下面四种情况分别用 http://192.168.1.1/proxy/aerchi.html 进行访问。

      第一种:

        location /proxy/ {
         proxy_pass http://127.0.0.1/;
        } 

        代理到URL:http://127.0.0.1/aerchi.html

      第二种(相对于第一种,最后少一个 / )

        location /proxy/ {
         proxy_pass http://127.0.0.1;
        }

        代理到URL:http://127.0.0.1/proxy/aerchi.html

      第三种:

        location /proxy/ {
        proxy_pass http://127.0.0.1/aaa/;
        }

        代理到URL:http://127.0.0.1/aaa/aerchi.html

      第四种(相对于第三种,最后少一个 / )  

        location /proxy/ {
          proxy_pass http://127.0.0.1/aaa;
        }

        代理到URL:http://127.0.0.1/aaaaerchi.html

    场景2:因业务需要,一套前段代码需要映射到两个后台地址上,所以需要在接口上进行区分转发,同时转发时需要把区分标志去掉

    实现:

  • server {
      listen  0.0.0.0:8204;
      server_name localhost;
      # 静态页面目录
      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;#转到后台时需要把/wx去掉
         }
      }
      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;
      }
    }
    
  • 特别注意:

      1、 proxy_set_header Host $http_host;

      不改变请求头 。

      2、proxy_set_header Host host;如果客户端请求头中没有携带这个头部,那么传递到后端服务器的请求也不含这个头部。这种情况下,使用 host;如果客户端请求头中没有携带这个头部,那么传递到后端服务器的请求也不含这个头部。 这种情况下,使用host;如果客户端请求头中没有携带这个头部,那么传递到后端服务器的请求也不含这个头部。这种情况下,使用host变量它 的值在请求包含“Host”请求头时为“Host”字段的值,在请求未携带“Host”请求头时为虚拟主机的主域名;

      3、proxy_set_header Host host: host:host:proxy_port;

      服务器名可以和后端服务器的端口一起传送:

      4、如果某个请求头的值为空,那么这个请求头将不会传送给后端服务器:

      proxy_set_header Accept-Encoding “”;

      5、用户真实的ip地址转发给后端服务器

      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Real-IP $remote_addr;

    场景3:前段代码用vue实现,vue没有具体的页面,也是通过/xx/xx来访问资源,这时候需要与后台接口进行区分

    实现:

      可以通过特殊字符类似“#”来区分,携带#的请求默认是静态资源

  • 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;
      }
    }
    
  • 场景4:因服务器限制,数据库访问需要nginx进行转发

    实现:

  • 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;
      }
    
    }
    
  • 特别注意:

    stream与http同级,所以不要放到http里

    场景5:访问某域名时需要重定向到另一个地址

    实现:

  • server {
      listen 7000;
      server_name localhost;
      client_max_body_size 100m;
    
      location = / {
        rewrite ^(.*) https://www.baidu.com permanent;
      }
    }
    
  • 特别注意:

    last        本条规则匹配完成后继续向下匹配新的location URI规则
    break        本条规则匹配完成后终止,不在匹配任何规则
    redirect       返回302临时重定向
    permanent     返回301永久重定向

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。

    标签:nginx 域名 转发
    您可能感兴趣