如何用Nginx实现端口转发(反向代理)

发布时间:2022-01-08T14:01:36 Nginx

如何用Nginx实现端口转发(反向代理)第1张

首先介绍最常用的,将域名转发到本地另一个端口上

域名www.example.com 转发到本地端口36765

这样访问 https://www.example.com 时就会转发到本地的36765端口上

server {

    listen       443 ssl http2;                                           
    server_name  www.example.com;                                              


    location / {
        proxy_redirect off;   
        # 下面的 目标服务器及 <端口号>
        proxy_pass http://127.0.0.1:36765;
        proxy_http_version 1.1;
        proxy_read_timeout 360s; 

        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

支持WebSocket的端口转发

server {

    listen       443 ssl http2;                                           
    server_name  www.example.com;                                              

    client_max_body_size 1024M;

    location / {
        proxy_redirect off;   
        # 下面的 目标服务器及 <端口号>
        proxy_pass http://127.0.0.1:36765;
        proxy_http_version 1.1;
        proxy_read_timeout 360s; 
        # Upgrade 和 Connection 都是必须的
        # 这将告诉 Nginx 以 WebSocket 的形式对待入站连接
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

将域名转发到另外一个域名

server{
  listen 80;
  server_name  www.a.com;
  index  index.php index.html index.htm;

  location / {
    proxy_pass  http://www.b.com;
    proxy_set_header Host $proxy_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

这样访问 http://www.a.com 时就会转发到 http://www.b.com