我有一台 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; }