NGINXredirect多个域名

我对NGINX和整个configuration都很陌生,所以我在一位朋友的帮助下,设法用下面的configuration设置了服务器:

server { listen 80; listen [::]:80; server_name domain.com; rewrite ^ https://$server_name$request_uri? permanent; } server { listen 80; listen [::]:80; server_name domain.de; rewrite ^ https://$server_name$request_uri? permanent; } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name domain.com domain.de; root /var/www/html; index index.php index.html index.htm; 

有多个服务器为我的主页面,一些项目页面和一些私人页面。 我为每个TLD都有一台自己的服务器,因为我不希望地址栏中的TLD在redirect时发生变化。 现在我的答案是,如何将所有这些非SSL服务器简单地转换为一个大型服务器(1 /项目)而不重​​定向到一个TLD?

例:

Project.com,Project.de,Project.net和Project.org将其中5个以上的非SSL服务器redirect到一个启用了SSL的服务器。 当我要去http://project.net我beeingredirect到https://project.net 。 由于单一的非SSL服务器设置,TLD根本不会改变。

我想实现的是,我可以缩小我的configuration文件,使每个项目的一个非SSL服务器redirect到https而无需更改域。

  :80 Server :443 Server 

http domain.net —> https domain.net([非SSL 01] —> [SSL 01])http domain.com —> https domain.com([non-SSL 02] — > [SSL 01])http domain.de —> https domain.de([非SSL 03] – > [SSL 01])

http project.de —> https project.de([non-SSL 04] —> [SSL 02])http project.com —> https project.com([non-SSL 05] — > [SSL 02])等等

我的理解是,你想要将多个域redirect到一个域。

首先,我build议你使用return 301而不是rewrite 。 这种情况下效率更高。

这是默认的服务器configuration。 如果请求与任何虚拟主机不匹配,它将被提供。

 server { listen 80 default_server; listen [::]:80 default_server; server_name _; return 301 https://your-correct-domain.com$request_uri; } 

还要将服务器设置为接收your-correct-domain.com的HTTP通信并将其redirect到HTTPS。

 server { listen 80; listen [::]:80; server_name your-correct-domain.com; return 301 https://your-correct-domain.com$request_uri; } 

然后,最后,你的所有configuration你的–correct-domain.com的HTTPS服务器。

 server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name your-correct-domain.com; root /var/www/html; index index.php index.html index.htm; } 

请注意,如果有人直接访问IP,则此设置将用于默认服务器。 例如,您的服务器IP是192.168.100.100 ,如果有人在浏览器中input了这些IP,他们将被redirect到https://your-correct-domain.com

默认服务器将捕获所有没有为其准备的服务器/虚拟主机的请求。 所以如果有人要求domain.de,my.domain.de,site2.domain-something.com,他们将被永久redirecthttps://your-correct-domain.com 。 您也可以select使用302而不是301redirect。

最后需要注意的是,如果你有其他的虚拟主机不是你正在做的这个设置的一部分,这不会是一个问题。 默认的服务器将不会被服务,因为Nginx将首先检查虚拟主机是否存在并首先提供服务。

更新的答案对应于澄清的问题。

这种redirect可以按如下方式完成:

 server { server_name _; listen 80 default_server; return 301 https://$server_name$request_uri; } 

这是一个默认的服务器块,与任何域名匹配。 我们只需返回一个301重写响应,并在请求中使用服务器名称。 这将做你的例子显示。