需求主要是将 http 改为 https 的请求;由于是内部访问的,所以并不是标准的 80 -> 443 端口,而是直接将原地址加端口改为 https 的;
现自己配置的my.domain.conf
如下:
server {
server_name mydomain.com;
listen 9000 ssl;
if ($host != 'mydomain.com'){
return 444;
}
ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
error_page 497 301 =307 https://$host:$server_port$request_uri;
location /{
proxy_pass http://localhost:8080;
proxy_redirect off;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Ssl on;
}
}
server {
listen 9000;
server_name mydomain.com;
if ($host = 'mydomain.com') {
return 301 https://$host:$server_port$request_uri;
}
return 404;
}
虽然能解决此需求,但是怎么感觉怪怪的有问题,还请大家指出,同时,也有几点疑问点想请教下大家:
proxy_pass
方式是否合理,但是感觉配置 tomcat ssl 里好像更恶心(现在也都是 springboot )?if ($host != 'mydomain.com'){ return 444; }
的话,直接通过 ip 访问还是能访问的,并没有走到预期的 Nginx 404 页面;以上问题,还请不吝赐教
另,版本 nginx/1.10.3
1
Tink 2020-09-02 00:31:43 +08:00 via Android
http 和 https 都监听 9000 端口?还能这样吗
|
3
julyclyde 2020-09-02 09:41:10 +08:00
if 条件不对,不应该判断 host header 而应该判断是否 ssl
$https $schema 这俩变量 |
4
stephCurry OP @julyclyde 事实上,这个配置文件可以,但是还是不知道为什么通过 IP 直接访问 http 9006,应该不执行 return 301, 而是直接 404 啊,但实际上还是能直接访问,直到 https 里加了判断$host
|