nginx虚拟主机,http服务器和tcp端口转发

时间:2017-10-02 18:04:52

标签: nginx tcp proxy

我有一个nginx服务器,它在example.com虚拟主机的端口上提供静态html页面。

还有两台服务器在localhost:50001localhost:50002上运行,

我想以下列方式将所有请求转发给example.com

example.com          --->      /var/www/servers/example.com/
example.com:50001    --->      localhost:50001
example.com:50002    --->      localhost:50002

我怎样才能做到这一点?

我能够实现第一个,并开始聆听5000150002

这是配置

server {
        listen 80;
        listen [::]:80;

        listen 50001;
        listen [::]:50001;

        listen 50002;
        listen [::]:50002;

        root /var/www/servers/example.com/;

        index index.php index.html index.htm index.nginx-debian.html;

        server_name example.com;

        location / {
                try_files $uri $uri/ =404;
        }


         location ~ \.php$ {
                include snippets/fastcgi-php.conf;

                fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;

        }

        location ~ /\.ht {
                deny all;
        }
}

1 个答案:

答案 0 :(得分:0)

我认为反向代理就是您所需要的。遵循this guide的规则,这很简单。

首先,从主配置中删除这些行(它也适用于默认配置,您只需要为每个端口分别创建新的server {}块)。

listen 50001;
listen [::]:50001;

listen 50002;
listen [::]:50002;

事情是创建两个服务器块配置,所以我们有/etc/nginx/sites-available/exampleat50001.com

server {
  listen 50001;

  server_name example.com;

  location / {
    proxy_pass http://localhost:50001;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
  }
}

与端口50002上的应用程序相同。最后一件事是重新启动nginx服务器。

# systemctl restart nginx.service

希望它适合你:)