我试图以一种方式配置我的Nginx,以便将所有HTTP请求重定向到HTTPS。这是一个测试环境,我没有域,因此,我不确定重定向是否能够正常工作。主机部分仅为127.0.0.1。这是当前的配置:
server {
listen 80;
listen [::]:80;
server_name _;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name _;
ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
...我还尝试过:删除server_name _;将返回301放在一个位置块中;添加进一步的ssl设置,例如ssl_session_timeout、ssl_protocols、ssl_prefer_server_ciphers。ssl已被删除。
语法已经过测试,nginx重新加载,端口已经用nmap进行了测试( 80和443都是打开的)。
当我使用curl -k (因为证书是自签名的) 127.0.0.1时,我得到以下消息:
301永久移动nginx/1.14.0 (Ubuntu)
当我卷起-k 127.0.0.1:443时,我得到以下消息:
400普通HTTP请求被发送到HTTPS端口400坏请求普通HTTP请求被发送到HTTPS端口nginx/1.14.0 (Ubuntu)
有人能帮我理解我做错了什么吗?我很乐意提供更多的信息。非常感谢!
发布于 2021-09-01 09:43:29
下面是一个为我工作的nginx配置。
upstream app {
server app:8080;
}
server {
listen 80;
listen [::]:80;
server_name webprojects-dev.co.uk;
return 301 https://webprojects-dev.co.uk$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 http2;
server_name webprojects-dev.co.uk;
include /etc/nginx/common.conf;
include /etc/nginx/ssl.conf;
location / {
proxy_pass http://app;
include /etc/nginx/common_location.conf;
}
}在这种情况下,nginx运行在一堆码头容器中,这些容器与坞工组成联网,但这不应该对它的工作方式产生任何影响。
上游是反向代理的app容器(和端口)。
第一个服务器块将请求转发到https。正如您所看到的,我和您的主要区别是server_name是域名,并且还包含在返回301语句中。
第二个服务器块用于https。同样,server_name是一个域,但除此之外,我唯一能看到的其他区别是,我在行listen [::]:443上没有ssl。
免责声明:不是nginx方面的专家。我只是黑客入侵,直到我有一个反向代理配置,为我工作,现在我只是复制和粘贴它的一切。
https://stackoverflow.com/questions/68482197
复制相似问题