Nginx+Tomcat+Https

一、申请证书

阿里云提供免费的证书:《证书申请传送门》

Nginx+Tomcat+Https_第1张图片
注意:保护类型那里提示:保护一个明细子域名。

二、安装证书

等审核通过后,就可以下载证书了。

把证书上传到服务器,假设你的证书是abc.pem和abc.key,我这里放到/etc/nginx/cert文件夹下了,cert文件夹是我自己创建的,使用mkdir cert来创建,提示权限错误时加sudo命令。

然后修改nginx配置文件,vim /etc/nginx/nginx.conf,增加以下内容:

upstream tomcat {
    server 127.0.0.1:82 fail_timeout=0;
}

# HTTPS server
server {
    listen       443 ssl;
    server_name  www.b.yujiago.cn; # 这里是你的域名,要与下面tomcat里的保持一致

    ssl_certificate      /etc/nginx/cert/abc.pem;
    ssl_certificate_key  /etc/nginx/cert/abc.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto https;
        proxy_redirect off;
        proxy_connect_timeout      240;
        proxy_send_timeout         240;
        proxy_read_timeout         240;
        # note, there is not SSL here! plain HTTP is used
        proxy_pass http://tomcat;
    }
}

然后编辑tomcat的配置文件,/conf/server.xml
修改HOST里的value值,我这里修改为:

# 这里的name要与nginx配置文件里的server_name保持一致

<Host name="www.b.yujiago.cn" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">

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

        <Context path="" docBase="spring-boot-ssm" name="/spring-boot-ssm" debug="0" reloadable="true" />

Host>

到这里的话,可以使用https://www.b.yujiago.cn访问了,但是无法通过http://www.b.yujiago.cn访问,即默认的80端口。


强制80端口转发到443端口,即将http://www.b.com重定向到https://www.b.com

# 监听80端口,根据二级域名,动态进行转发
server{
    listen       80;

    server_name  *.yujiago.cn;

    client_max_body_size 50m;

    if ( $http_host ~* "^(.*?)\.yujiago\.cn" ) {
        set $domain $1;
    }

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $http_host;

        if ( $domain ~* "a" ) {
            proxy_pass http://www.a.yujiago.cn:83;
        }
        if ( $domain ~* "b" ) {
            # proxy_pass https://www.b.yujiago.cn;

            # 重定向到https
            rewrite ^/(.*) https://www.b.yujiago.cn/$1 permanent;
        }
        if ( $domain ~* "c" ) {
            proxy_pass http://www.c.yujiago.cn:84;
        }

        # proxy_pass http://www.a.yujiago.cn:83;
    }
}

网上有的资料说需要配置tomcat中以下部分新增的内容,但我这次没有配置

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

注意:
1、开启防火墙的443端口

你可能感兴趣的:(【工具】Tomcat,【中间件】Nginx)