如何在nignx上从https重写中排除子域名?

时间:2016-12-06 12:08:42

标签: ssl nginx passenger lets-encrypt

我最近安装了LetsEncrypt SSL证书,该证书在我的主域上运行良好,但我还有其他子域设置为虚拟主机。但是,子域的所有流量现在都被重定向到https,这会导致浏览器抱怨隐私。

我的主域名nginx配置如下:

server {                                                                                                              │
        listen 80;                                                                                                    │
        server_name domain.com www.domain.com;                                                                          │
        return 301 https://$server_name$request_uri;                                                                  │
}                                                                                                                     │
                                                                                                                      │
server {                                                                                                              │
        # Basic configuration                                                                                         │
        listen 443 ssl;                                                                                               │
        server_name domain.com www.domain.com;                                                                      │
        passenger_enabled on;                                                                                         │
        passenger_app_env development;                                                                                │
        root /home/user/path_to_app/public;                                                                       │
                                                                                                                      │
        # Required for LetsEncryptSSL certificate                                                                     │
        location ~ /.well-known {                                                                                     │
                        allow all;                                                                                    │
        }                                                                                                             │
                                                                                                                      │
        # Include SSL config                                                                                          │
        include snippets/ssl-domain.com.conf;                                                                        │
        include snippets/ssl-params.conf;                                                                             │
}     

我的子域配置是这样的:

server {                                                                                                              │
        #listen 80 default_server;                                                                                    │
        server_name app1.domain.com;                                                                                 │
        passenger_enabled on;                                                                                         │
        passenger_app_env development;                                                                                │
        root /home/app1/app1/public;                                                                                  │
}      

1 个答案:

答案 0 :(得分:0)

我认为唯一的机会是在第一个括号中将server_name定义为正则表达式。 就是这样的事情

server {                                                                                                             
        listen 80;                                                               
        server_name ^(www\.domain\.com|domain\.com)$;
        return 301 https://$server_name$request_uri;
        }

http://nginx.org/en/docs/http/server_names.html