我在 www.example.com 上托管一个 wordpress 博客,并尝试在 hexo.example.com 上做一个 hexo 项目
我将 SSL 配置放在 /etc/nginx 文件夹中的 nginx.conf 上,因为证书是通配符,我不想在两个服务器块文件中写入两次。
我有一个用于 example.com 的服务器块
server {
listen 80;
server_name example.com;
return 301 https://www.example.com$request_uri;
}
server {
listen 443 ssl default_server;
server_name www.example.com;
root /var/www/html/example.com;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php?q=$uri&$args;
}
location ~* \.(jpg|jpeg|gif|css|png|js|ico|html)$ {
access_log off;
expires max;
}
location ~ /\.ht {
deny all;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
}
}
该服务器块将把 example.com 和 www.example.com 定向到https://www.example.com而且效果非常好。
对于其他服务器块 hexo.example.com
server {
listen 80;
server_name hexo.example.com;
root /var/www/html/hexo.example.com;
location / {
try_files $uri $uri/ =404;
}
}
hexo.example.com 将被定向到主域名 www.example.com。
有人能给我一些建议我该做什么吗?
谢谢。
答案1
最简单的方法就是写两次。
可以采用某种配置技巧来避免编写两次,但编写两次会复杂得多。如果这种技巧可以实现的话。
答案2
我将 SSL 配置放在 /etc/nginx 文件夹中的 nginx.conf 上,因为证书是通配符,我不想在两个服务器块文件中写入两次。
使用include
指示。
为您的 ssl 配置创建一个配置文件。
-- ssl.conf ssl_certificate /path/to/your/certificate.pem; ssl_certificate_key /path/to/your/certificate.key; ...snip... ssl_trusted_certificate /path/to/your/trust-chain.pem;
将配置文件包含在虚拟主机配置中。
server { listen 80; server_name example.com; location / { access_log off; return 301 https://www.example.com$request_uri; } } server { listen 443 ssl; server_name www.example.com; ## put your SSL config file path you made earlier here include /path/to/ssl.conf; ... snip ... } server { listen 443 ssl; server_name hexo.example.com; ## again, put your SSL config file path here. include /path/to/ssl.conf; ... snip ... }
hexo.example.com 将被定向到主域名 www.example.com。
不会。如果你需要重定向,那么只需重定向即可,例如
server {
listen 80;
server_name hexo.example.com;
location / {
access_log off;
return 301 https://www.example.com;
}
}