如何使用 nginx 设置反向代理?

如何使用 nginx 设置反向代理?

我正在尝试获取我的docker容器的主机名,并且因为我只能使用反向代理为此,我正尝试借助 nginx 来实现这一点。

一个docker容器是一个web服务,它向我的本地主机公开端口8080。

所以我可以通过以下方式访问网络服务器:

http://localhost:8080

相反,我宁愿使用:

http://webservice.local

因此我添加了/etc/hosts

127.0.0.1 webservice.local

然后我安装了 nginx 并添加到/etc/nginx/sites-available/default

server {
     listen 80 default_server;
     listen [::]:80 default_server ipv6only=on;

     root /usr/share/nginx/html;
     index index.html index.htm;

     # Make site accessible from http://localhost/
     server_name localhost;

     location / {
             # First attempt to serve request as file, then
             # as directory, then fall back to displaying a 404.
             try_files $uri $uri/ =404;
             # Uncomment to enable naxsi on this location
             # include /etc/nginx/naxsi.rules
     }


     location webservice.local {
         proxy_pass http://localhost:8080
     }

重新加载 nginx 后,当我尝试在浏览器中 ERR_CONNECTION_REFUSED打开时出现以下错误。http://webservice.local

我做错了什么?如何正确设置反向代理?

答案1

我不确定这是否是正确的语法。请尝试以下方法:

upstream myupstream {
    server 127.0.0.1:8080 fail_timeout=2s;
    keepalive 32;
}

location / {
     proxy_pass http://myupstream;
     proxy_redirect http://myupstream/ /;
}

类似这样的事……

但是如果您只想将端口 8080 重定向到 80,为什么不使用像 socat 这样的网络实用程序呢?

然后,您应该在 nginx 中为每个上游添加虚拟主机,并在 DNS 或 /etc/hosts 中添加这些虚拟主机,它们都将解析为本地主机。

或者您可以避开上游​​并使用虚拟主机,如下所示:

server {
  listen 80;
  server_name myvirtualhost1.local;
  location / {
    proxy_pass http://127.0.0.1:8080;
}

server {
  listen 80;
  server_name myvirtualhost2.local;
  location / {
    proxy_pass http://127.0.0.1:9090;
}

相关内容