http - 合并两个 nginx 服务器
问题描述
这个 nginx 配置应该重定向
http://example.com
http://www.example.com
https://www.example.com
至https://example.com
server {
server_name example.com;
root {:siteRoot};
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
index index.html;
}
server {
server_name example.com www.example.com;
listen 80;
return 301 https://example.com$request_uri;
}
server {
server_name www.example.com;
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
return 301 https://example.com$request_uri;
}
它工作正常,但可以以某种方式合并以避免所有重复代码吗?
解决方案
server {
server_name www.example.com example.com;
root {:siteRoot};
listen 443 ssl;
listen 80;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
if ($scheme = http) {
return 301 https://example.com$request_uri;
}
if ($host = 'www.example.com') {
return 301 https://example.com$request_uri;
}
index index.html;
}
正如我评论的那样,我喜欢在服务器中将我在 nginx 中的不同选项分开,因为我认为它不是“代码”。但是我认为,如果您想将所有内容都放在同一台服务器上,那么我刚刚写的内容应该对您有用。我正在设置一个虚拟服务器来检查“ifs”是否按预期工作,因为这个概念是正确的,但我需要深入检查代码。
推荐阅读
- python - 在张量流 keras 中动态组合损失函数
- javascript - 如何使用外部选择下拉组件在 React Leaflet Map 上选择区域
- asp.net-core - asp net core 2.1上的错误500身份验证
- google-cloud-platform - 将秘密存储为云构建环境变量
- regex - 具有多行匹配的正则表达式(字幕字符串)
- kotlin - 使用 Kotlin runCatching 进行功能(结果/错误)翻译
- android - 在 true 中使用 windowIsTranslucent 时,如何为活动使用标准的进入/退出动画过渡?
- spartacus-storefront - 升级到 Spartacus v3.0 后 SSR 停止工作
- python - 如何按包含python中列表的值对字典进行排序
- python-3.x - 将稀疏方阵拆分为块