ssl - 如何使用 nginx 将不同的子域重定向到在不同端口上运行的应用程序
问题描述
我在端口 3000 和 1337 的 EC2 实例中运行了 2 个 nodejs 应用程序。我想要实现的是
admin.mydomain.com
应该重定向到在 PORT 1337 上运行的应用程序和
mydomain.com www.mydomain.com
应该重定向到在 PORT 3000 上运行的应用程序。
使用我当前的 nginx 配置,我得到一个 502
map $subdomain $subdomain_port {
default 3000;
www 3000;
admin 1337;
}
server {
listen 80;
listen [::]:80;
server_name _;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name ~^(?P<subdomain>.+?)\.historydiaries\.com$;
location / {
proxy_pass http://localhost:$subdomain_port;
proxy_redirect off;
}
ssl_certificate /etc/letsencrypt/live/historydiaries.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/historydiaries.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_session_cache shared:SSL:5m;
ssl_session_timeout 1h;
add_header Strict-Transport-Security “max-age=15768000” always;
}
解决方案
我将使用单独的 Nginx vhost 配置。
一个用于www.mydomain.com,另一个用于 admin.mydomain.com
server {
listen 80;
server_name www.mydomain.com;
access_log /var/log/nginx/mydomain_access.log;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://localhost:3000/;
proxy_redirect off;
}
}
和
server {
listen 80;
server_name admin.mydomain.com;
access_log /var/log/nginx/admin.mydomain_access.log;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://localhost:1337/;
proxy_redirect off;
}
}
这只是简单的虚拟主机配置。您可以稍后在需要时添加 Let's Encrypt。
推荐阅读
- testng - 为什么TestNG中这个测试的执行顺序是这样的?
- python - 如何仅从 Google API 的嵌套 JSON 响应中获取特定值?
- ruby-on-rails - 避免迁移中的重复
- ruby-on-rails - rails activerecord where 子句如何接受动态参数?
- sql - 在存储过程中将 varchar 转换为数字时出错
- javascript - 将数据传递给 v-model
- kotlin - 为什么 mutableSet 不更新!用于 Kotlin 列表中的项目
- angular - 包含换行符的字符串在 webapi 中出现没有换行符
- google-app-engine - 部署到 Google 应用引擎 (Java) 后,找不到 MemcacheServiceFactory 类错误
- c# - 如何通过 c# 从 1400 万个表中删除 100,000 个特定行?