nginx return命令返回不带www的https url

nginx return命令返回不带www的https url,url,redirect,nginx,Url,Redirect,Nginx,我正在尝试设置nginx以返回所有http请求的https url。 问题是,它返回的https url没有www,这导致url无效 这是我的配置: server { listen 80; server_name my_server; return 301 https://$server_name$request_uri; } server { listen 443; ssl on; ssl_certificate /etc/ssl/my

我正在尝试设置nginx以返回所有http请求的https url。 问题是,它返回的https url没有www,这导致url无效

这是我的配置:

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

server {  
   listen   443;  
   ssl    on;
   ssl_certificate    /etc/ssl/my_pem.pem;
   ssl_certificate_key    /etc/ssl/my_key.key;  
   server_name my_server;    

   access_log /var/log/nginx/my_log.access.log;

   ...
}
我已经尝试在服务器名称中包含www,并为301返回指定带有www的显式url

一切都导致无效的url

不过我注意到,当我登录应用程序并将https更改为http并触发请求时,重定向会起作用。当我注销时,重定向失败并呈现https url,而不显示www

然后我尝试只使用服务器名称,如:return301 https://$server\u name,但这也不起作用

我希望用户不必担心他们指定的url。网址如下:www.one.two-three.com

>

这项工作:

但这并不是:

>


>

通过在Chrome/Chrome中的URL行中键入www.one.two-three.com,它将重定向到

在Firefox中,它返回

>


有人能帮忙吗

多谢各位


Seba

我用来解决这个问题的模式有两部分。首先,我设置了显式重定向,从HTTP转到正确的HTTPS URL,以及从裸HTTP转到“www”HTTPS。其次,这意味着我可能不依赖于
$server\u name
,因此我的配置中有一点可维护的重复

server {
  listen      80;
  server_name www.example.com example.com example.biz example.us www.example.biz www.example.us;
  return      301     https://www.example.com$request_uri;
}

server {
  listen      443;
  server_name example.com example.biz example.us www.example.biz www.example.us;

  ssl on;
  ssl_certificate /etc/ssl/com.example.crt;
  ssl_certificate_key /etc/ssl/com.example.key;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers RC4:HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers on;

  return      301     https://www.example.com$request_uri;
}

server {
  listen      443;
  server_name www.example.com;
  ...
}

我尝试了上述设置,在0.0.0.0:443上重新加载nginx conf:conflicting服务器名“www.mysite.com”时出现此错误,被忽略,浏览器返回无效的重定向错误消息。在这种情况下,子域是否重要?我的具体示例是www.one.two-three.com,其中“one”是子域。关于端口443上冲突的服务器名称的第一个错误可能是由于复制错误服务器部分中的服务器名称列表引起的。域/子域必须位于正确的位置。首先从我的示例中的第三个服务器部分开始—这是您的“真实”服务器配置,也是您在端口443上收听
www.one.two-three.com
的唯一位置。接下来设置第二个服务器部分(从端口443重定向)并在那里添加
one.two-three.com
。最后,设置第一个服务器部分(来自端口80的重定向)并在那里添加两个域名。清理浏览器缓存,因为301是可缓存的重定向。你可能会有马车。使用EG303进行测试。工作起来很有魅力:)谢谢!