Nginx是一款由俄罗斯程序员Igor Sysoev所开发的,它可以被作用HTTP和反向代理服务器,也可以用作电子邮件代理服务器。Nginx最初设计是为了俄罗斯访问量最大的网站rambler.ru所设计的,后来因为其出色的高性能被众多的大型网站所采用,如百度、京东、新浪、网易、腾讯、淘宝等都用了Nginx,是个程序员你不会点Nginx你都不好意思。
Nginx在Linux服务器上的表现是最佳的,简直就是为Linux贴身打造的,事实上也是这样原作者参考了Linux设计的很多思想,这里我们就讲解一下如果在Linux 设置 Nginx,并配置SSL,让其实现HTTPS/WSS访问。
Nginx Linux 安装
Nginx第一个公开版本0.1.0发布于2004年10月4日,截止目前2018年11月11日最新版本是1.15.6,但是这里我们以1.11.6版本为例,其他版本类似,只需把版本号替换一下就是。
在根目录下输入下面的命令下载Nginx
输入下面的命令解压压缩包
在执行命令前我们需要添加依赖库,继续输入下面的命令
1、安装gcc 环境
2、安装PCRE依赖库
PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。
3、安装zlib 依赖库
zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库。 zlib依赖库安装命令:
4、安装OpenSSL安全套接字层密码库
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。
Nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要在 Centos 安装 OpenSSL 库。
进入Nginx安装目录(cd nginx-1.11.6 )执行配置命令
编译安装Nginx
执行安装命令
启动、停止Nginx等常用命令说明
首先进入Nginx目录
下面的命令意思如下
./nginx 开启
./nginx -s stop 停止
./nginx -s quit 此方式停止步骤是待nginx进程处理任务完毕进行停止。
./nginx -s reload 重新加载Nginx配置文件
更改Nginx配置文件
进入配置文件文件夹
备份配置文件
编辑nginx.conf配置文件
Linux Vi编辑命令如下:
i键进入编辑模式
Esc键退出编辑模式进入命令模式
命令模式下:英文冒号+q!代表不保存退出,英文冒号+wq保存退出
要实现https访问,Nginx配置文件如下示例:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
upstream mqttServer {
server 你需要转发目的地址+端口 weight=1;
#check interval=3000 rise=2 fall=5 timeout=1000;
}
server {
listen 443 ssl;
server_name 你的域名;
ssl_certificate C:/nginx-ssl/crt地址;
ssl_certificate_key C:/nginx-ssl/key地址;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://mqttServer;
proxy_redirect off;
proxy_connect_timeout 86400;
proxy_read_timeout 86400;
proxy_send_timeout 86400;
}
keepalive_timeout 1000;
}
}
要实现WSS访问,Nginx配置文件如下示例:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
upstream mqttServer {
server 你需要转发目的地址+端口 weight=1;
#check interval=3000 rise=2 fall=5 timeout=1000;
}
server {
listen 443 ssl;
server_name 你的域名;
ssl_certificate C:/nginx-ssl/crt地址;
ssl_certificate_key C:/nginx-ssl/key地址;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://mqttServer;
proxy_redirect off;
proxy_connect_timeout 86400;
proxy_read_timeout 86400;
proxy_send_timeout 86400;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
keepalive_timeout 1000;
}
}
然后使用命令保存退出,重新加载配置
./nginx -s reload
可是大多数第一次安装https证书,都会报错,说缺少SSL模块,报错信息如下所示:
nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:37
这时我们需要先安装SSL模块:
需要确认如下两点:
1、Nginx安装位置/usr/local/nginx/
2、Nginx的源码包放在了/nginx-1.11.6下,如果没有的话,重新下载你对应的Nginx版本的源码包,找个目录解压
3、切换目录到Nginx的源码包位置
cd /nginx-1.11.6
4、执行命令安装ssl模块
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
5、安装
make
6、先备份Nginx
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
7、关闭Nginx(因为要把新的模块覆盖旧的nginx)
先找到nginx端口号,如图,目前我nginx的进程号为:13542
ps -ef|grep nginx
执行语句,杀死该进程
kill -QUIT 13542
8、重新加载数据
cp ./objs/nginx /usr/local/nginx/sbin/
#先切换到sbin目录
cd /usr/local/nginx/sbin/
#最后启动nginx:
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
因为刚才替换nginx模块的时候是把nginx进程都杀死了,所以要用上面的命令进行启动,而不能使用reload重启。
现在Nginx就不会报错了,以上就是Linux 设置 Nginx 并配置SSL 实现HTTPS/WSS协议访问新手教程,希望可以帮助的Nginx配置Https和WSS转发的新手朋友。