首页 > Nginx使用及开发 > Nginx ssl 一些问题

Nginx ssl 一些问题

2017年11月2日 发表评论 阅读评论

官网说明:

Syntax:	ssl on | off;
Default:	
ssl off;
Context:	http, server
Enables the HTTPS protocol for the given virtual server.

It is recommended to use the ssl parameter of the listen directive instead of this directive.

这个是nginx官网对ssl的说明,官方建议采用监听在端口上设置ssl 如:listen 443 ssl;但是nginx没说为什么,下面通过测试了解下工作过程。

server {
listen 80;
listen 443;
server_name abc.x.com;
root /data/www
#index.html;
ssl on;
}

如果在server Context 内设置ssl on,且此server在http Context是第一个server,那么这个server所监听的所有端口(这里是80和443,其他端口也如此),都会绑定ssl协议,在配置之后的server context时,如果想使用80端口作为http端口使用,访问时则会报错400 Bad Request,The plain HTTP request was sent to HTTPS port。

如果不想被占用,两个办法
方法 一

http {
server {
listen 80;
server_name foo.x.com;
root /data/www
#index.html;
}

server {
listen 80;
listen 443;
server_name abc.x.com;
root /data/www
#index.html;
ssl on;
}

}

在配置ssl on;的server之前,配置一个http plain的server,这样80端口就会被绑定在http plain上了。(此方法属于奇技淫巧)
通过实际测试,nginx的端口应该是哪个协议先占用端口,之后这个端口在全局范围内就只能使用这个协议了。

方法二

server {
listen 80;
listen 443  ssl;
server_name abc.x.com;
root /data/www
#index.html;
}

通过监听listen 443 ssl; 来配置,这样就精确指定某个端口采用ssl协议了,不会影响其他端口。

这就是nginx官方为啥推荐采用listen 443 ssl;的原因吧
-简单备忘下,写的比较水

分类: Nginx使用及开发 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.