两个域和相同的配置

两个域和相同的配置

我有一台 Nginx 服务器,如果服务器名称为 sub1.mysite.com,它会将传入呼叫重定向到端口 80 到 443。以下是配置文件:

server {
    listen                              80;
    server_name                         sub1.myite.com;
    return                              301 https://sub1.mysite.com$request_uri;
}

server {
    listen                              443 ssl;
    include                             ssl-wedding.conf;
    server_name                         sub1.mysite.com;
    access_log                          logs/webapp.access.log;
    proxy_pass_header                   Server;
    root                                /var/www/nginx/wedding;
    index                               index.php;

    include                             vary_header.conf;
    include                             whitelist.conf;

    location /apiproxy/ {
        proxy_pass                      https://apidev.apisite.com/;
    }

    location / {
        try_files                       $uri $uri/ /index.php?$args;
    }

    location ~ .php$ {
        fastcgi_split_path_info         ^(.+\.php)(.*)$;
        fastcgi_pass                    wedding_backend;
        fastcgi_index                   index.php;
        try_files                       $uri $uri /index.php;
        fastcgi_param                   SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param                   PATH_INFO $fastcgi_script_name;
        include                         fastcgi_params;
        fastcgi_param                   QUERY_STRING $query_string;
        fastcgi_param                   REQUEST_METHOD $request_method;
        fastcgi_param                   CONTENT_TYPE $content_type;
        fastcgi_param                   CONTENT_LENGTH $content_length;
        fastcgi_intercept_errors        on;
        fastcgi_ignore_client_abort     on;
        fastcgi_connect_timeout         60;
        fastcgi_send_timeout            180;
        fastcgi_read_timeout            180;
        fastcgi_buffer_size             128k;
        fastcgi_buffers                 4 256k;
        fastcgi_busy_buffers_size       256k;
        fastcgi_temp_file_write_size    256k;
    }
}

upstream wedding_backend {
    server                              unix:/var/www/php/fpm-wedding.sock;
}

我需要做的是接受来自 sub2.mysite.com 的呼叫,并将所有呼叫从 80 重定向到 443,并使用与 sub1 相同的配置。我想出了 2 种半修复此问题的方法,但并不完全符合我的需要。一种方法是将第一个服务器块更改为:

server {
    listen                              80;
    server_name                         sub1.myite.com sub2.mysite.com;
    return                              301 https://sub1.mysite.com$request_uri;
}

但这会将访问者浏览器中的 URL 更改为 sub1,我希望他停留在 sub2 上。另一种方法是仅使用 sub2 的服务器名称复制块 1 和 2,但这种方式不太易于维护,因为如果我在一个块中更改某些内容,我也必须在副本中对其进行更改。

因此,理想情况下,我希望块 1 只更改端口并保持子域不变。块 2 处理配置,如果我可以根据我在子域 1 还是子域 2 中添加 http 标头,这对我的应用程序也很有用,例如 X-SubDomainOrigin:“sub1”。

答案1

这将对客户端 Host 标头提供的域执行 301 重定向到 https:

server { listen 80; server_name *.mysite.com; rewrite ^ https://$host$request_uri? permanent; }

相关内容