redirect - nginx 重定向所有流量,而不仅仅是 server_name

标签 redirect ssl nginx

我正在使用 nginx 作为多个节点服务器的反向代理。我最近将 SSL 添加到其中一个项目。

我的配置看起来有点像这样:

# domain1
server {
    listen 443 ssl;
    server_name *.domain1.com
    location / {
        proxy_pass http://123.456.789.012:3001;
        # ... other proxy stuff
    }
}

server {
  listen 80;
  server_name *.domain1.com;
  return 301 https://$host$request_uri;
}

这对 domain1 非常有效。 HTTPS 有效,HTTP 重定向到 HTTPS。

但是,这以某种方式影响了同一服务器上的另一个 域。这是它的配置:

# domain2
server {
    listen 80;
    server_name *.domain2.com;

    location / {
        proxy_pass http://123.456.789.012:3002;
        # ... all the other proxy stuff
    }
}

发生的事情是,当我转到 http://domain2.com 时,我被重定向到 https://domain2.com ,它提示说我没有该域的 SSL 证书。

当我从 domain1 中删除第二个服务器 block 时,将 80 上的流量转发到 https 的服务器 block ,domain2 再次工作。

在我看来,nginx 忽略了 server_name 属性,并将所有流量转发到 HTTPS。我也尝试过使用硬 URL:

server_name domain1.com www.domain1.com

我正在尝试做一些非常简单的事情,所以一定有一些明显的问题,但我看不到!

最佳答案

正如@grochmal 所指出的,我相信这是一个简单的缓存问题。通过切换到 302 Found 重定向而不是 301,并使用新的浏览器,我能够获得正确的结果。

我还更正了通配符,这可能是原来的问题。

关于redirect - nginx 重定向所有流量,而不仅仅是 server_name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38075635/

相关文章:

amazon-s3 - 将根域名重定向到亚马逊s3

nginx - 使用 Nginx (ngx_http_ssl_module) 编译时,: Openssl, LibreSSL 或 BoringSSL 哪个更好?

php - 无法重新加载 nginx.service : Interactive authentication required

php - curl 导致 SSL : unable to get local issuer certificate

nginx - 覆盖 Nginx Recipe default_enabled_site

ruby-on-rails - 如何使用 RSpec 测试一个 URL 是否重定向到另一个 URL?

C#;重定向处理标准错误但不处理其标准输出

ruby-on-rails - 如何在 Rails 3 中使用 AJAX 请求实现重定向响应?

linux - 将密码添加到在 amazon AMI 上运行的 curl

java - 如何检索 SSL 客户端正在使用的 KeyManager、TrustManager 和 SecureRandom 对象?