标签: nginx

位置中的 add_header 指令覆盖服务器中的 add_header 指令

使用nginx 1.2.1我可以使用add_header以下方法添加多个标头:

server {
    listen       80;
    server_name  localhost;
    root /var/www;
    add_header Name1 Value1;      <=== HERE
    add_header Name2 Value2;      <=== HERE

    location / {
        echo "Nginx localhost site";
    }
}
Run Code Online (Sandbox Code Playgroud)

结果

GET /
HTTP/1.1 200 OK
Name1: Value1
Name2: Value2
Run Code Online (Sandbox Code Playgroud)

但是,我一使用add_header里面的指令location,下面的其他add_header指令就会server被忽略

server {
    listen       80;
    server_name  localhost;
    root /var/www;
    add_header Name1 Value1;      <=== HERE
    add_header Name2 Value2;      <=== HERE

    location / {
        add_header Name3 Value3;  <=== HERE
        add_header Name4 …
Run Code Online (Sandbox Code Playgroud)

ubuntu nginx http-headers

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

如何在 nginx 中跟踪 HTTP 重定向?

我有一个基于 nginx 的 HTTP 代理,我想在其中处理所有 HTTP 重定向,以便客户端仅获得重定向链中的最后一个响应。

基本代码如下所示:

location /proxy {
    rewrite ^/proxy/([^/]+) $1 break;

    proxy_pass http://$uri/;
}
Run Code Online (Sandbox Code Playgroud)

我对以下 1 级重定向的尝试是这样的:

error_page 301 302 307 =200 @redir;
Run Code Online (Sandbox Code Playgroud)

...并拥有这个命名位置:

location @redir {
    proxy_pass $proxy_location;
}
Run Code Online (Sandbox Code Playgroud)

只有没有 $proxy_location 变量,我找不到创建它的方法。它应该包含Location:从上游接收到的标头值。

有什么想法吗?

nginx

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

Nginx $document_root$fastcgi_script_name 与 $request_filename

如果在我的配置文件中设置,我不会注意到任何区别

 fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
Run Code Online (Sandbox Code Playgroud)

或者:

 fastcgi_param  SCRIPT_FILENAME    $request_filename;
Run Code Online (Sandbox Code Playgroud)

他们分别做什么?两者之一比另一个更好吗?

提前致谢。

nginx web-server fastcgi

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

测试是否设置了 nginx 变量

如果尚未设置,我需要将变量设置为默认值。以下配置完成这项工作:

if ($foo ~ "^$") {
   set $foo default-value;
}
Run Code Online (Sandbox Code Playgroud)

但它会生成运行时警告:

使用未初始化的“foo”变量

有没有办法测试是否设置了变量而不生成警告并且不全局关闭警告:

uninitialized_variable_warn off;
Run Code Online (Sandbox Code Playgroud)

nginx

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

使用 Nginx 将子路径重定向到外部主机

我需要在 Nginx 中创建一个非常简单的映射,将子路径重定向到位于同一子网中的另一台服务器。

  • Nginx 服务器:192.168.0.2
  • Tomcat 服务器:192.168.0.3:8443

我试着把它放在服务器部分

    location /tomcatapi/ {
        rewrite /tomcatapi/(.*) $1 break;
        proxy_pass http://192.168.0.3:8443;
    }
Run Code Online (Sandbox Code Playgroud)

但是我访问http://www.myservice.com/tomcatapi/是一个 500 错误页面,在 nginx 日志文件中我有这个错误:

    the rewritten URI has a zero length
Run Code Online (Sandbox Code Playgroud)

我在这个 conf 中缺少什么?

nginx proxy reverse-proxy

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

nginx 位置是什么 ~* 和 ~

我试图更好地理解 nginx 并尝试形成一个正则表达式,其中每个不匹配的 url 都/api/postdataV1被路由到不同的服务器集群。我一直在例子中看到这两件事,没有解释

location ~ {some regex}

location ~* (some regex}
Run Code Online (Sandbox Code Playgroud)

我的第一个问题是这些是什么~~*(我认为~只是意味着我指定一个正则表达式?),但怎么样~*呢?

我想我想要的是这个。这是正确的吗?

location ~ ^/api/postdataV1$ {
    #matches to this route to where I want
}

location / {
    #This will be everything except /api/postdataV1 I think
}
Run Code Online (Sandbox Code Playgroud)

这是正确的吗?但是~*……我不明白那个

谢谢,院长

nginx

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

nginx:连接到上游时没有实时上游

在站点页面和主页上的某些时间之间切换时显示 502 错误网关错误,但不是主页上的第一个请求,只有在另一个页面重定向到它时才会显示。它发生在一些 javascript 文件中

在两个上游配置的负载均衡 php1 php2 都是 apache 服务器。

当我检查错误日志时,我喜欢:

no live upstreams while connecting to upstream

[error] 27212#0: *314 no live upstreams while connecting to   upstream, client: ip_address , server: example.com, request: "GET / HTTP/1.1", upstream: "http://example.com", host: "example.com", referrer: "http://example.com/mypages/"
Run Code Online (Sandbox Code Playgroud)

这是负载平衡服务器配置

  upstream example.com  {
    #  ip_hash;
      server php01 max_fails=3 fail_timeout=15s;
      server php02 max_fails=3 fail_timeout=15s;
    }

    server {
      listen IP:80;
      server_name example.com;
      access_log /var/log/nginx/example.com.access;
      error_log /var/log/nginx/example.com.error error;

     location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header …
Run Code Online (Sandbox Code Playgroud)

nginx gateway 502

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

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万
查看次数

如何缓解 POODLE 但保持对旧客户端的 SSLv3 支持

我如何减轻 POODLE 攻击,但仍保持对旧客户端的支持,例如 Windows XP 上的 IE6 或电子邮件客户端。

我注意到谷歌这样做:https : //www.ssllabs.com/ssltest/analyze.html?d=mail.google.com

我正在使用 nginx 和 openssl。

此外,我想对现代/大多数浏览器保持正向保密。我想在 ssllabs 上保持 A 级。

ssl nginx poodle

19
推荐指数
1
解决办法
6014
查看次数

nginx: [emerg] 此处不允许使用“stream”指令

我在 Ubuntu 16.04 上安装了来自 ppa 的最新 NGINX。

nginx 版本:nginx/1.12.1

根据我的理解,它应该支持流和 UDP 负载均衡。

但我收到此错误消息:

nginx: [emerg] "stream" directive is not allowed here in /etc/nginx/conf.d/load-balancer.conf:3
Run Code Online (Sandbox Code Playgroud)

这是我的配置 /etc/nginx/conf.d/load-balancer.conf

stream {
        upstream backend {
                least_conn;
                server 172.31.9.51 fail_timeout=10s;
                server 172.31.20.140 fail_timeout=10s;
        }

        server {
                listen          500 udp;
                listen          4500 udp;
                proxy_pass      backend;
                proxy_timeout   1s;
                proxy_responses 1;
                error_log       logs/dns.log;
        }
}
Run Code Online (Sandbox Code Playgroud)

nginx load-balancing udp ubuntu-16.04

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