Nginx https 在 Nginx 中应该怎么配置默认就是使用 https 呢?

QueXuQ · 2018年05月04日 · 最后由 ErvinCheung 回复于 2018年11月28日 · 10905 次阅读

配置好 https 后,发现了两个问题:
我们配置的域名是www.xxx.com,但是发现 ruby china 是使用xxx.com,不需要用到前面的www,这两种方式的区别在哪里呢?哪 3 一种比较好。
还有一个就是,现在访问,默认依然是使用 http,只有在使用 https 访问,才会用到 https,怎么在 nginx 配置,默认就是使用 https 呢?

一般来说 xxx.com 是一级域名,www.xxx.com aaa.xxx.com 是二级域名,访问默认还是使用 http 说明你还是没弄好,http 默认 80 端口,请求过去之后会跳转到 443 端口,就是 https 了

将 80 端口的请求重定向到 443 端口

server {
  listen 80;
  listen [::]:80;
  server_name www.xxx.com;
  return 301 https://$host$request_uri;
}
lixu19941116 回复

多谢,我试试看,可以成功不。

要看你买的 SSL 凭证是单一的 xxx.com?或是 www.xxx.com? 或是你买的是 *.xxx.com 的 wildcard 的凭证?

前面要不要 www 都没有说一定哪一个好,只是要考量用户两种都可能访问,都要 redirect 或 rewrite 到真正服务器所在的位置。

我都用这样的配置,将 80,443 端口设置在一起,强制都以 https 来访问:

server {
    listen 80;
    listen 443 ssl;
    server_name www.xxx.com;
    ssl_certificate ssl/server.crt;
    ssl_certificate_key ssl/server.key;
    access_log /www.xxx.com/logs/access.log;
    error_log /www.xxx.com/logs/error.log;
    root /www.xxx.com/public;

    if ($ssl_protocol = "") {
      rewrite ^ https://$server_name$request_uri? permanent;
    }

    location / {
    # ...
    }
}

国外的很多网站已经没有 www 了,有 www 也会重定向到没有的域名。可以从 cookie 域的角度考虑自己是否需要 www。另外 https 除了 301 之外最好加上 hsts

推荐用这个 https://freessl.cn/ 一个提供免费 HTTPS 证书申请的网站,(Let's Encrypt 与 TrustAsia)我刚试了, https://lumao.vicw.com/ 这是我搞的撸猫网,证书有效期 1 年,可以续订,比自己搞简单多了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号