NGINX将http重定向到https,将非www重定向到ww

on3*_*3al 34 ssl https redirect nginx

我正在使用SSL设置nginx服务器.

ssl的域名是www.mydomain.com

我想重定向所有请求:

http://mydomain.com,http://www.mydomain.comhttps://mydomain.com

https://www.mydomain.com

我目前有以下服务器块设置:

server{
  listen 443 ssl;
  root /www/mydomain.com/;

  ssl_certificate /ssl/domain.crt;
  ssl_certificate /ssl/domain.key;
  .
  . 
  .
}

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

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

server{
  listen ssl 443;
  server_name mydomain.com;
  return 301 https://www.mydomain.com$request_uri;
}
Run Code Online (Sandbox Code Playgroud)

这目前不起作用,但我不明白为什么不.我可以得到http - > https工作或没有www到 - > www工作的组合,但如上所述混合它们不起作用.

Moh*_*ady 17

如果您的ssl证书不支持非www域,则ssl重定向将不起作用.配置正确但可以简化为1个重定向服务器

另外不要忘记重新加载nginx sudo service nginx reload

server {
  listen 80;
  listen 443 ssl;
  server_name example.com;
  # add ssl settings
  return 301 https://www.example.com$request_uri;
}
Run Code Online (Sandbox Code Playgroud)

  • 我只是测试了那个版本,它也给了我同样的东西,你可以将它分成两个听线`listen 80;`和`listen 443;` (4认同)
  • 这给了我 - 在/etc/nginx/nginx.conf中的``nginx:[emerg]无效参数"443":96` (3认同)

Sun*_*mar 11

我迟到了,但你可以这样做

server{
  listen 443 ssl;
  server_name www.mydomain.com;
  root /www/mydomain.com/;

  ssl    on;
  ssl_certificate /ssl/domain.crt;
  ssl_certificate /ssl/domain.key;
  .
  . 
  .
}

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

server{
  listen 443;
  server_name mydomain.com;
  return 301 https://www.$server_name$request_uri;
}
Run Code Online (Sandbox Code Playgroud)

或者可以替换return 301 https://www.$server_name$request_uri;使用 rewrite ^ http://www.$server_name$request_uri? permanent;,既会工作.

你还需要在谷歌网站管理员中设置这个以获得更好的搜索引擎优化.