标签: nginx

NGINX add_header,添加多个header

我正在尝试发送多个标头

add_header Access-Control-Allow-Origin http://dev.anuary.com;
add_header Access-Control-Allow-Origin https://dev.anuary.com;
Run Code Online (Sandbox Code Playgroud)

然而,NGINX 将它们变成了

Access-Control-Allow-Origin: http://dev.anuary.com, https://dev.anuary.com
Run Code Online (Sandbox Code Playgroud)

解决办法是什么?

nginx

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

Nginx 设置 server_names_hash_max_size 和 server_names_hash_bucket_size

我们在一项服务中使用 Nginx 作为 Apache 的反向代理,该服务为任何人提供自己的网站。在创建帐户时,系统会为域创建一个新的 nginx conf 文件,其中包含两个条目,一个用于端口 80,另一个用于 443。我们注意到,每 30 个左右的域,我们都会收到错误消息:

Restarting nginx: nginx: [emerg] could not build the server_names_hash, 
you should increase either server_names_hash_max_size: 256 
or server_names_hash_bucket_size: 64.
Run Code Online (Sandbox Code Playgroud)

随着大约 200 个域的增长,我们不得不将 server_names_hash_max 大小增加到 4112,并且担心这不会很好地扩展。我希望了解这些配置是如何工作的,以及确保我们可以使用这种方法扩展到数千个域的最佳设置是什么。

此外,在该哈希大小下,nginx 开始需要几秒钟的时间来重新加载,这导致系统在重新启动时不可用。

以下是整体设置(在 Ubuntu 服务器 10.10 nginx/1.0.4 上运行):

user www-data;
worker_processes 4;
pid /var/run/nginx.pid;

events {
    worker_connections 4096;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 300;
    types_hash_max_size 2048;
    # server_tokens off;

    server_names_hash_bucket_size 64; …
Run Code Online (Sandbox Code Playgroud)

nginx

28
推荐指数
3
解决办法
6万
查看次数

即使我更新了 OpenSSL,我的服务器仍然容易受到心跳的影响

我有一个 Ubuntu 12.04 服务器。我已经更新了OpenSSL软件包以修复 heartbleed 漏洞。但即使我重新启动了 Web 服务器,甚至整个服务器,我仍然很容易受到攻击。

为了检查我的漏洞,我使用了:

dpkg 给出:

dpkg -l |grep openssl
ii  openssl  1.0.1-4ubuntu5.12   Secure Socket Layer (SSL) binary and related cryptographic tools
Run Code Online (Sandbox Code Playgroud)

(launchpad.net/ubuntu/+source/openssl/1.0.1-4ubuntu5.12)

security ubuntu nginx openssl heartbleed

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

如何让 nginx 记录使用的 SSL/TLS 协议和密码套件?

我的目标是确保客户端连接到我的 nginx 的适当安全性。我正在按照Mozilla 的指南在我的 nginx 安装上正确配置 TLS,但我没有对实践中使用的实际协议/密码套件的概述。

我现在所拥有的:

server {
    listen 443;
    ssl on;
    ssl_certificate /path/to/signed_cert_plus_intermediates;
    ssl_certificate_key /path/to/private_key;
    ssl_dhparam /path/to/dhparam.pem;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'the_long_ciphersuite_listed_there';
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:50m;
}
Run Code Online (Sandbox Code Playgroud)

有了这个,我想记录用于连接的 SSL 协议以及在客户端/服务器协商后选择的密码套件。例如:

10.1.2.3 - - [13/Aug/2014:12:34:56 +0200] "GET / HTTP/1.1" 200 1234 "-" "User agent bla"
Run Code Online (Sandbox Code Playgroud)

10.1.2.3 - - [13/Aug/2014:12:34:56 +0200] ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 "GET / HTTP/1.1" 200 1234 "-" "User agent bla"
Run Code Online (Sandbox Code Playgroud)

通过这种方式,我可以快速识别使用不支持 PFS 或其他相关安全启用技术的过时浏览器或自动化机器的客户端。

如何配置 nginx 以记录此信息?

security ssl nginx logging tls

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

Nginx:在一条路径上强制使用 SSL,在其他路径上强制使用非 SSL

如何设置 Nginx conf 文件以仅在我的站点中的一个路径上强制使用 SSL,而在所有其他路径上强制使用非 SSL?

例如,我希望 /user 下的所有 URL 都是 https,但所有其余的 URL 都是 http。

对于第一部分,我有:

rewrite ^/user(.*) https://$http_host$request_uri?;
Run Code Online (Sandbox Code Playgroud)

我不想使用“如果”。我认为它会利用操作顺序,但我不想以循环结束。

ssl nginx

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

为 jboss/tomcat 配置 nginx

为了使用 Apache 将流量传递到端口 80 上的 JBoss/TomCat,我们曾经安装和配置mod_jk.

是否有 nginx 的等价物?基本上希望所有端口 80 流量都传递给 jboss。

tomcat nginx jboss proxypass

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

Nginx set_real_ip_from AWS ELB 负载均衡器地址

我在 Amazon ELB 负载均衡器后面有一组 Nginx 服务器。我正在使用 set_real_ip(来自HttpRealIpModule),以便我可以访问这些服务器上的原始客户端 IP 地址(用于传递到 php-fpm 并在HttpGeoIPModule 中使用)。

貌似set_real_ip_from在nginx配置中只能接受一个I​​P地址。但是,关于 ELB 机器亚马逊说:

注意:因为与 LoadBalancer 关联的 IP 地址集会随着时间的推移而改变,所以永远不要使用任何特定的 IP 地址创建“A”记录。如果您想为 LoadBalancer 使用友好的 DNS 名称而不是 Elastic Load Balancing 服务生成的名称,您应该为 LoadBalancer DNS 名称创建 CNAME 记录,或使用 Amazon Route 53 创建托管区域。有关更多信息,请参阅在 Elastic Load Balancing 中使用域名

但是如果我需要输入一个 IP 地址,我就不能使用 CNAME(亚马逊的或我自己的)。这个问题有解决方案吗?

configuration nginx amazon-ec2 amazon-web-services amazon-elb

27
推荐指数
4
解决办法
3万
查看次数

如何让 nginx 转发 HTTP_X_FORWARDED_PROTO 标头?

我正在链接我的设置

nginx > apache/php
Run Code Online (Sandbox Code Playgroud)

haproxy > nginx > apache/php
Run Code Online (Sandbox Code Playgroud)

(使用 haproxy 1.5-dev18 并编译了 ssl 支持)

nginx 和 haproxy 都已正确设置以设置 HTTP_X_FORWARDED_PROTO 标头。但是,当 nginx 从 haproxy 获取 ssl 流量时,它会将连接视为 http 并将标头设置为如此。

如何设置 nginx 以转发 HTTP_X_FORWARDED_PROTO 标头(如果存在),否则继续根据连接设置它?

nginx

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

在 nginx proxy_pass 中禁用 IPv6

我的服务器没有 IPv6 地址。

但是,当我使用 Nginx proxy_pass 使用 IPv4 和 IPv6 到上游时,有时它会尝试使用 IPv6 发送传出请求:

2013/07/30 00:25:06 [error] 1930#0: *1482670 connect() to [AAAA:BBBB:C:DDD:E:F:GGG:HHH]:443 failed (101: Network is unreachable) while connecting to upstream, client: AA.BB.CC.DD, server: example.com, request: "GET /download/file HTTP/1.0", upstream: "https://[AAAA:BBBB:C:DDD:E:F:GGG:HHH]:443/download/file", host: "example.com"
Run Code Online (Sandbox Code Playgroud)

如何在 proxy_pass 中为传出请求禁用 IPv6?

nginx.conf:

upstream download {
  server download.example.com:443;
  keepalive 8;
}

location /download {
  proxy_set_header      X-Forwarded-For  $proxy_add_x_forwarded_for;
  proxy_set_header      Connection "";
  proxy_ignore_headers  X-Accel-Redirect;
  proxy_http_version    1.1;
  resolver              8.8.8.8;
  resolver_timeout      5s;
  proxy_pass            https://download;
}
Run Code Online (Sandbox Code Playgroud)

nginx -V:

nginx version: nginx/1.4.2 …
Run Code Online (Sandbox Code Playgroud)

nginx

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

将 Amazon ELB 后面的所有 http 请求重定向到 https 而不使用 if

目前我有一个 ELB 服务http://www.example.orghttps://www.example.org

我想设置它以便任何指向http://www.example.org 的请求都重定向到https://www.example.org

ELB 将 https 请求作为 http 请求发送,因此使用:

server {
      listen         80;
       server_name    www.example.org;
       rewrite        ^ https://$server_name$request_uri? permanent;
}
Run Code Online (Sandbox Code Playgroud)

将不起作用,因为对https://www.example.org 的请求仍将被发送到 nginx 上的端口 80。

我知道可以将其重写为

server {
      listen         80;
      server_name    www.example.org;
      if ($http_x_forwarded_proto != "https") {
          rewrite ^(.*)$ https://$server_name$1 permanent;
      }
}
Run Code Online (Sandbox Code Playgroud)

但是我读过的所有内容都if应该在 nginx 配置中不惜一切代价避免,这将适用于每个请求。此外,这意味着我必须为健康检查设置一个特殊的单独配置(如此处所述:“……当您位于 ELB 后面时,ELB 充当 HTTPS 端点并且仅向您的服务器发送 HTTP 流量,您破坏了以 HTTP 200 OK 响应响应 ELB 所需的健康检查的能力”)。

我正在考虑将登录放在 web 应用程序的代码中而不是 nginx 配置中(为了这个问题,我们假设它是一个基于 …

http nginx https redirect amazon-elb

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