nginx怎么配置ssl可以即允许http访问也允许https访问

如题所述

方法/步骤
给nginx配置SSL证书之后,https可以正常访问,http访问显示400错误,nginx的配置如下:
server {
listen 80 default backlog=2048;
listen 443;
server_name wosign.com;
root /var/www/html;

ssl on;
ssl_certificate /usr/local/Tengine/sslcrt/ wosign.com.crt;
ssl_certificate_key /usr/local/Tengine/sslcrt/ wosign.com .key;
}
http访问的时候,报错如下:
400 Bad Request
The plain HTTP requset was sent to HTTPS port. Sorry for the inconvenience.
Please report this message and include the following information to us.
Thank you very much!

说是http的请求被发送到https的端口上去了,所以才会出现这样的问题。
2
server {
listen 80 default backlog=2048;
listen 443 ssl;
server_name wosign.com;
root /var/www/html;

ssl_certificate /usr/local/Tengine/sslcrt/ wosign.com.crt;
ssl_certificate_key /usr/local/Tengine/sslcrt/ wosign.com .Key;
}
把ssl on;这行去掉,ssl写在443端口后面。这样http和https的链接都可以用,完美解决。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-08

示例1,里面模拟的是用户访问一台Nginx服务器,Nginx代理后面一台真实服务器。

如果只是一台机器上设置也是类似的。

此外里面的域名和端口和证书,日志名称之类的根据自己的情况来定。

这个文件保存成一个name.conf在Nginx.conf中include即可。

upstream yourserver {
        ip_hash;
        server 172.16.10.10 weight=1 max_fails=2 fail_timeout=2;
        }


server {
        listen       80;
        listen       443;
        server_name yoursever.domain.com;
        ssl     on;
        ssl_certificate      /etc/ssl/certs/yourname.crt;
        ssl_certificate_key  /etc/ssl/certs/yourname.key;

        ssl_session_timeout  5m;
        ssl_session_cache shared:SSL:50m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2  SSLv2 SSLv3;
        ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
        ssl_prefer_server_ciphers   on;

   
        location / {
                 proxy_pass http://yourserver;
                 client_max_body_size 15m;
                 proxy_redirect off;
                 proxy_set_header Host $host;
                 proxy_set_header X-Real-IP $remote_addr;
                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                 proxy_set_header X-Forwarded-Host $server_name;
                 proxy_set_header X-Forwarded-Proto https;


                }
         access_log /var/log/nginx/yourserver.log main;

        }

本回答被网友采纳
第2个回答  2018-07-29
服务器不配置301或302跳转HTTPS就可以了。
不配置跳转就意味着HTTP与HTTPS都可以打开了,本地浏览器清空记录访问。本回答被网友采纳
第3个回答  2018-03-06
这是个很简单的问题,你只需要同时监听两个端口就可以了:
server
{
listen 80; #允许http访问
listen 443 ssl; #允许https访问
server_name youdomain;
index index.html index.htm index.php;
root /data/web/;
}
第4个回答  2018-03-07
怎么可能,只能选一种。
相似回答