nginx + tomcat + https

刚才秉着学习的态度, 把自己的 blog 加全站 https .

环境

Centos 7
Tomcat 9
Java 8
Nginx nginx-1.12.1
solo-2.1.0

开始什么都是完美的:

申请证书

sslforfree

本来看的是 Let's Encrypt, 但是这个还要下载客户端什么的, 找到了个, 基于 Let's Encrypt 的中间商吧 sweat
sslforfree : 方便处理好多. 直接跟着走, 申请验证即可. 之后就可以下载证书了, 共三个文件. 两个 crt 文件, 一个 key 文件.

安装 nginx

原来 blog 是 tomcat 发布的. 打算改为 nginx + tomcat

下载 nginx : 地址

  wage http://nginx.org/download/nginx-1.12.1.tar.gz
  tar -xzvf nginx-1.12.1.tar.gz
  mv nginx-1.12.1 nginx
  cd nginx
  ./configure --prefix=/usr/local/nginx --with-http_ssl_module  (安装中间报错需要的依赖包)
  make
  make install

一气合成

配置 nginx

nginx.conf:

upstream backend {
    server localhost:8080;
}
server{
    listen    80;
    server_name    www.pilipala.co;
    return 301    https://$server_name$request_uri;
}
server{
    listen 80;
    server_name pilipala.co;
    return 301 https://$server_name$request_uri;
}

server{
    listen      443 ssl;
    server_name pilipala.co;

    ssl on;
    ssl_certificate /etc/certificate/pilipala.co/certificate.crt;
    ssl_certificate_key /etc/certificate/pilipala.co/private.key;

    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass http://backend$request_uri;
        proxy_set_header  Host $host:$server_port;
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-Proto https;
        client_max_body_size  10m;
    }
}

配置 tomcat

修改 Connector

<Connector port="8080" protocol="HTTP/1.1"
      connectionTimeout="20000"
      redirectPort="443"
      proxyPort="443"
      URIEncoding="UTF-8" />

修改 Host
在 Host 中加入下面代码

<Valve  className="org.apache.catalina.valves.RemoteIpValve"
      remoteIpHeader="x-forwarded-for"
      remoteIpProxiesHeader="x-forwarded-by"
      protocolHeader="x-forwarded-proto" />

程序配置文件

latke.props

serverScheme=https
serverHost=pilipala.co
serverPort=443

至此是我的所有配置了.

但是我在访问的时候问题来了:

当你在地址拦输入 pilipala.co 时, 你能看网站本来是有小绿色锁的, 结果又跳到 https://pilipala.co 但是没有小绿色锁了
而后台管理页面都是正常的 诸如我现在在写文章的页面 https://pilipala.co/admin-index.do#article/article 就是正常显示小锁的, 原因不明 求人解答.

ab6d2f564c674a10855b7e8bef9df514-image.png

fa30c399c38a48beaa1badc972ed9994-image.png

可以肯定的是,nginx 应该是没问题的. 当我故意吧 nginx 配置错误的时候输入网址 虽然会报 nginx 配置错误, 但小锁是显示了的.

预览地址: pilipala.co