我在example.com注册了example.com (并在其他地方托管)。 我在sub1.example.com创建了一个子域。 我有一台在EC2上运行良好的虚拟linux机器,可以访问ec2-xx-xx-xx-xx.compute-1.amazonaws.com 问题:如何让 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
如何一起使用正则表达式和nginx以便它们都重定向到同一个端点?
----全部解析为---> https://sub1.example.com
我当前的配置(仅适用于案例 2 和 3):
# Default server configuration
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name ~^(.*)\.(?<subdomain>\w+).example\.com$;
return 301 https://$subdomain.example.com$request_uri;
}
server {
# SSL configuration
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
#
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
#
root /var/www/html;
server_name *.example.com;
location / { ..... localhost:3000
然后在另一个文件中:
server {
# Redirect all http traffic to https
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
server {
# SSL configuration
listen 443 ssl;
listen [::]:443 ssl;
#
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
#
root /var/www/html;
server_name example.com www.example.com ;
if ($http_x_forwarded_proto = "http") {
return 301 https://$server_name$request_uri;
}
location / { .... localhost:8000
通过使用 NGINX 的服务器匹配逻辑和正则表达式,我能够解决案例 1-4。
Nginx 将按此顺序解析服务器名称(注意:Nginx 也针对此顺序进行了优化,正则表达式最慢):
这是在下面的代码中实现的匹配和重定向逻辑:
多级子域 ---> 到单级子域 --> 到 ssl
由于我的通配符 ssl 证书仅对 *.example.Z4D236D1C502D10BEC5ZFE6. 根本没有办法解决这个问题。
-------> https:// sub1.example.com
# Default server configuration
server {
listen 80;
listen [::]:80;
listen 443;
listen [::]:443;
server_name ~^(.*)\.(?<subdomain>\w+).example\.com$;
return 301 http://$subdomain.example.com$request_uri;
}
server {
listen 80;
listen [::]:80;
server_name ~^(?<subdomain>\w+).example\.com$;
return 301 https://$subdomain.example.com$request_uri;
}
server {
# SSL configuration
#
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
#
root /var/www/html;
location / { ..... localhost:3000
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.