相关疑难解决方法(0)

反向代理时让 nginx 传递上游的主机名

我用主机名运行了几个 docker 容器:

web1.local web2.local web3.local

由 nginx 根据主机名路由到这些。我在此设置(在连接到互联网的不同机器上)前面有一个代理,我将上游定义为:

    upstream main {
      server web1.local:80;
      server web2.local:80;
      server web3.local:80;
    }
Run Code Online (Sandbox Code Playgroud)

和实际的虚拟主机描述:

    server {
      listen 80;
      server_name example.com;
      location / {
        proxy_pass http://main;
      }
    }
Run Code Online (Sandbox Code Playgroud)

现在,因为容器接收主机名“main”而不是“web1.local”,它们不能正确响应请求。

问题:如何在代理请求时告诉 nginx 在 Host: 标头中传递上游服务器的名称而不是上游服务器组的名称?

nginx reverse-proxy

122
推荐指数
4
解决办法
29万
查看次数

nginx 没有 server_name 并且只使用静态 IP 地址?

这是我的第一个 Web 应用程序部署,并且遇到了各种问题。

我目前正在为 Django 应用程序寻找 nginx + gunicorn 实现,但这个问题主要与 nginx 配置有关。对于某些情况 - nginx 将接收到 gunicorn 本地服务器的连接和代理。

在 nginx 配置中,它说server_name我必须提供一个吗?我不打算使用任何类型的域名,只是通过我网络的外部 ip(它是静态的)和要监听的端口号。

我的愿望是当我访问类似的东西时,http://xxx.xxx.xxx.xxx:9050我将能够获得该网站。

以下是我将基于配置的示例代码以供参考。

   server {
        listen   80;
        server_name WHAT TO PUT HERE?;

    root /path/to/test/hello;

    location /media/ {
        # if asset versioning is used
        if ($query_string) {
            expires max;
        }
    }
    location /admin/media/ {
        # this changes depending on your python version
        root /path/to/test/lib/python2.6/site-packages/django/contrib;
    }
    location / {
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Real-IP …
Run Code Online (Sandbox Code Playgroud)

ubuntu nginx gunicorn

44
推荐指数
2
解决办法
13万
查看次数

nginx 在 upstream_http_ 变量上添加标头条件

我在 nginx 上有一个反向代理,它代理了很多站点。我最近为所有启用 SSL 的网站启用了 HTTP Strict Transport Security。我现在有一个不想启用此功能的站点。

我想我会做一个简单的检查,如果我的上游已经给我发送了一个Strict-Transport-Security-header,如果没有,就添加一个。这样,我的上游可以发送包含max-age=0避免代理启用 HSTS的 STS 标头。

我以为我只需按如下方式更改我的配置:

location / {
        proxy_pass http://webservers;

        proxy_redirect off;

        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto "https";

        if ($upstream_http_strict_transport_security = "") {
                add_header Strict-Transport-Security "max-age=15552000";
        }
}
Run Code Online (Sandbox Code Playgroud)

但是,可能是因为if 是 evil,这不起作用。我尝试了很多不同的方法来确保变量确实存在(就是这种情况),但似乎没有任何帮助。

我怎么能让这个工作?

nginx reverse-proxy

19
推荐指数
2
解决办法
2万
查看次数

标签 统计

nginx ×3

reverse-proxy ×2

gunicorn ×1

ubuntu ×1