nginx下单个server段同时支持http和https

自从之前给blog申请了一个ssl证书后,我是把http段和https段分成了2个server。但是这样有个问题是改配置的时候比较麻烦,有时候修改了http段的就忘记了修改https段的。实际上是可以直接把这两个配置文件合并起来的。方法比较简单,就是一个server段同时listen 443和80端口,然后listen 443后面加上ssl参数,并且需要把以前ssl on给删除掉(这种配置方式本来也不是现在提倡的了,详细的可以参考nginx的http://wiki.nginx.org/HttpCoreModule#listen)。配置文件如下

  
server {  
listen [::]:443 ssl so_keepalive=on;  
listen [::]:80 so_keepalive=on;  
root /home/www/blog;  
index index.html index.htm index.php;  
server_name localhost;  
ssl_certificate      cert/server.crt;  
ssl_certificate_key  cert/server.key;  
ssl_session_timeout  5m;  
ssl_session_cache shared:sslcache:1m;  
ssl_protocols  SSLv3 TLSv1 TLSv1.1 TLSv1.2;  
ssl_ciphers  HIGH:!aNULL:!MD5;  
ssl_prefer_server_ciphers   on;  
location / {  
……  
}  
}  

之前我配置的时候只是同时listen了80和443,但是同时开启了ssl on。这个时候就遇到了400 Bad Request: The plain HTTP request was sent to HTTPS port这种报错。