Linux 设置 Nginx 并配置SSL 实现HTTPS/WSS协议访问新手教程

Nginx是一款由俄罗斯程序员Igor Sysoev所开发的,它可以被作用HTTP和反向代理服务器,也可以用作电子邮件代理服务器。Nginx最初设计是为了俄罗斯访问量最大的网站rambler.ru所设计的,后来因为其出色的高性能被众多的大型网站所采用,国外如Facebook、YouTube,国内的如百度、京东、新浪、网易、腾讯、淘宝等都用了Nginx,是个程序员你不会点Nginx你都不好意思。

Linux 设置 Nginx 并配置SSL 实现HTTPS/WSS协议访问新手教程

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

wget -c https://nginx.org/download/nginx-1.11.6.tar.gz

输入下面的命令解压压缩包

tar -zxvf nginx-1.11.6.tar.gz

在执行命令前我们需要添加依赖库,继续输入下面的命令

1、安装gcc 环境

yum install gcc-c++

2、安装PCRE依赖库

yum install -y pcre pcre-devel

PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。

3、安装zlib 依赖库

yum install -y zlib zlib-devel

zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库。
zlib依赖库安装命令:

4、安装OpenSSL安全套接字层密码库  

yum install -y openssl openssl-devel

OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。

Nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要在 Centos 安装 OpenSSL 库。

进入Nginx安装目录(cd nginx-1.11.6 )执行配置命令

./configure

编译安装Nginx

执行安装命令

make install

启动、停止Nginx等常用命令说明

首先进入Nginx目录

cd /usr/local/nginx/sbin/

下面的命令意思如下

./nginx 开启

./nginx -s stop 停止

./nginx -s quit 此方式停止步骤是待nginx进程处理任务完毕进行停止。

./nginx -s reload 重新加载Nginx配置文件

更改Nginx配置文件

进入配置文件文件夹

cd /usr/local/nginx/conf

备份配置文件

cp nginx.conf nginx.conf.back

编辑nginx.conf配置文件

vi 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

杀死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转发的新手朋友。

22

发表回复