jfinal腾讯云https的ssl到底怎么配置啊?

看了帖子,怎么都配不成功。

使用JFinal自身的ssl,http和https都能启动显示:

image.png

如果端口改成80和443,80端口使用域名http可以访问。443使用https打不开。

如果使用nginx,代理不管是8080还是7443,nginx的http都可以访问,nginx443的https不能访问。

server {
listen 80;
listen 443 ssl http2;
keepalive_timeout 70;

server_name abc.com;
root /www/wwwroot/abc.com/abc-blog/webapp;

ssl_certificate /www/wwwroot/abc.com/abc-blog/webapp/1_abc.com_bundle.crt;
ssl_certificate_key /www/wwwroot/abc.com/abc-blog/webapp/2_abc.com.key; 
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

location / {
  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_set_header X-Forwarded-Port $server_port;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Host  $http_host;
  proxy_set_header X-Nginx-Proxy true;
  proxy_set_header Connection "";
  proxy_pass     http://0.0.0.0:8080;
}
}

nginx的配置是根据帖子里能搜到综合的。

不知道啥原因,配置成功的大佬能不能把nginx的配置给参考参考啊。


--------------------

只用JFinal自身的,没有开启nginx,http可以,https还是打不开。

image.png

端口应该没问题,而且我特意把所有端口都打开了,还重启服务器了,

image.png

就是不知道我哪步出错了,有个提示,说jdk15.0.1下org.xnio.nio.NioXnio$2,搜到说是反射警告,是不是这里的问题?看看换成Java8行不行。


----------------------

神奇!!

我用的宝塔,之前只使用了xxx.com域名,然后申请宝塔的ssl不成功,然后申请的腾讯云的ssl,部署不成功。今天开启了www二级域名,然后申请宝塔的ssl证书,然后,然后,直接可以使用https了。

使用的方式就是nginx,JFinal只用http,nginx配置如上。宝塔自动部署不知道证书配置放在什么地方。

结贴。


-----------------

好像使用的还是腾讯云申请的证书,不过倒是https正常了,猜测是宝塔的原因吧。使用nginx配置,强制no-ww跳转到www,http强制跳转到https:

server {
        listen *:80;
        listen *:443 ssl; 
        listen [::]:80;
        listen [::]:443 ssl; 
        server_name abc.com;

		ssl_certificate /www/wwwroot/abc.com/abc-blog/webapp/1_abc.com_bundle.crt;
		ssl_certificate_key /www/wwwroot/abc.com/abc-blog/webapp/2_abc.com.key; 
        return 301 https://www.abc.com$request_uri;
}

server {
        listen *:80;
        listen [::]:80;
        server_name www.abc.com;
        return 301 https://www.abc.com$request_uri;
}

server {
        listen *:443 ssl; 
        listen [::]:443 ssl; 
        server_name www.abc.com;      
              
		ssl_certificate /www/wwwroot/abc.com/abc-blog/webapp/1_abc.com_bundle.crt;
		ssl_certificate_key /www/wwwroot/abc.com/abc-blog/webapp/2_abc.com.key; 
        location / {
			  proxy_set_header X-Forwarded-Proto $scheme;
			  proxy_set_header X-Forwarded-Port $server_port;
			  proxy_set_header X-Real-IP $remote_addr;
			  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			  proxy_set_header Host  $http_host;
			  proxy_set_header X-Nginx-Proxy true;
			  proxy_set_header Connection "";
			  proxy_pass     http://0.0.0.0:8080;
        }
}

至此,终于配好了ssl了。

评论区

木飘零

2020-11-04 10:33

你先试试 curl https://0.0.0.0 命令,能看到html内容的话,就去腾讯云的管理页看看端口开放的设置吧

JFinal

2020-11-04 10:45

配置 https 的时候, 要么配置 nginx 代理,要么配置 jfinal undertow, 不能两者都配置

方案一,通过 nginx 代理 https:
1: 专心配置好 nginx,你当前的配置应该没问题
2: jfinal 项目专心走 http,不要理会 https 的事。 假定 http 跑在 8080 端口
3: nginx 的 proxy_pass 代理到 http 的 8080 端口上去

方案二,直接使用 jfinal undertow 的 https:
1:按照文档进行配置:https://jfinal.com/doc/1-4
2:生产环境端口号使用 443
3:要注意请求是直达 jfinal undertow 的 443,中间不能再有 nginx 代理存在,无论这个代理是走的 http 还是 https,都不能有

如果你的服务器要同时跑多个项目,建议用 nginx 代理方案,否则可以用方案二

andu

2020-11-04 10:56

@木飘零 我把安全组所有端口都打开,还重启服务器,curl http都可以,curl https都不行啊。

超级大富

2020-11-05 15:50

证书是绑定域名的,直接curl https://ip 应该是不行的

zzutligang

2020-11-07 16:57

实际项目中,把证书配置到nginx上,然后转发到JFinal的http上,完全没问题,实际项目正在用,不要怀疑。

andu

2020-11-08 16:33

@zzutligang 你的jdk版本多少?与jdk版本有没有关系?还有,我忘记说了,我用的宝塔。

zzutligang

2020-11-10 09:42

我的是jdk8。宝塔老板不是被抓了吗?

andu

2020-11-10 12:03

@zzutligang 不清楚啊,但宝塔目前还是正常使用。

热门分享

扫码入社