手记——Nginx的https、http配置

最近一致忙于大屏项目,有几个页面的请求数过多,导致接口请求等待时间超长,于是启用https来减少等待时间。
使用http请求结果如下:
手记——Nginx的https、http配置_第1张图片
使用https请求效果如下:
手记——Nginx的https、http配置_第2张图片
由此可以看到,请求等待时间明显缩短,效果非常好。剩下的就是优化接口、sql相关了,此文只介绍nginx配置。

Nginx配置

1.前置条件

  • 服务器已经安装nginx并且通过http可以正常访问
  • 已获取ssl证书,可以使用阿里云申请免费证书,也可使用本地生成证书

2.检查nginx是否安装了ssl_module、v2_module模块

# 进入nginx的安装目录,执行命令
./sbin/nginx -V

查看nginx已安装的模块,此图已安装好2个模块
如果没有安装这两个模块,则需要进入nginx源码中,安装相应模块。
注意,若已安装别的模块,也要一起安装,步骤如下:

  • 进入nginx的解压缩目录(不是安装目录),我的是在(/root/nginx),执行命令
 ./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module
  • 再执行命令
make
#切记不要执行make install,否则会重新安装nginx
  • 上述操作执行完成以后,你的目录下会出现objs文件夹,文件夹内存在nginx文件,如图:
    手记——Nginx的https、http配置_第3张图片
  • 接下来使用新的nginx文件替换掉之前安装目录sbin下的nginx,注意这里的替换的时候可以先将之前的文件备份下,停掉nginx服务
# 进入安装目录
./nginx -s stop #停止nginx服务

# 将原来的nginx备份
mv /usr/local/nginx/sbin/nginx  /usr/local/nginx/sbin/nginx_bak

# 替换之前的nginx
cp /root/nginx/objs/nginx /usr/local/nginx/sbin
  • 成功之后,进入到nginx安装目录下,查看上述2个模块是否成功
    查看nginx已安装的模块,此图已安装好2个模块
  • PS:这里替换后在执行 -V命令如果提示权限不足,先给这个nginx文件提升下权限

3.配置ssl证书

为了便于测试,将使用Mac本地生成证书

1.生成私钥
2.生成证书
3.生成服务器的私钥,去除密钥口令
4.使用私钥为证书请求签名,生成给服务器签署的证书,格式是x509的PEM格式
5、nginx配置

手记——Nginx的https、http配置_第4张图片
1、首先,我们创建一个保存证书的目录,然后进入目录

cd /usr/local/Cellar/nginx/1.21.0/ssl_cert

2、生成私钥(如输入一个密码:root)

openssl genrsa -des3 -out private.key 2048

3、生成证书

openssl req -new -key private.key -out server.csr

4、生成服务器的私钥,去除密钥口令

openssl rsa -in private.key -out server.key

5、使用私钥为证书请求签名,生成给服务器签署的证书,格式是x509的PEM格式

sudo openssl x509 -req -in server.csr -out server.crt -signkey server.key -days 3650

至此,生成完毕

4.进行nginx.conf配置

  • 修改nginx.conf文件
cd /usr/locla/nginx/conf

# 修改nginx.conf文件
vim nginx.conf
  • 修改后的文件内容如下
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
	server {
		    # 监听443端口
		    listen 443;
		    # 你的域名
		    server_name localhost; 
		    ssl on;
		    ssl_certificate      /usr/local/Cellar/nginx/1.21.0/ssl_cert/server.crt;
            ssl_certificate_key  /usr/local/Cellar/nginx/1.21.0/ssl_cert/server.key;
		    location / {
		     	proxy_pass  http://公网地址:项目端口号;
		    }
	}
	server {
		    listen 80;
		    # 你的域名
		    server_name localhost;
		    # 将请求转成https
		    rewrite ^(.*)$ https://$host$1 permanent;
	}
}
  • PS:这里需要在安全组中开放443端口

4.重启nginx

./nginx -s stop
./nginx 
  • PS:
  • 最好是stop后,再启动nginx,最终生效。
  • reload不生效

5.至此,https已配置完成,访问页面验证即可

手记——Nginx的https、http配置_第5张图片

实际项目中,只使用80、443端口,不太现实,可以自定义其它端口才是上上策,咱们深入研究

其实和80端口的配置方式一致,下面用8081端口举例

# 修改nginx.conf文件内容,添加如下代码即可
  server {
        listen       8081 ssl http2;
        server_name  localhost;

        ssl_certificate      /usr/local/Cellar/nginx/1.21.0/ssl_cert/server.crt;
        ssl_certificate_key  /usr/local/Cellar/nginx/1.21.0/ssl_cert/server.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_buffer_size 4k;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

		# 此行代码作用:http请求自动转为https
        error_page 497 301 https://$http_host$request_uri;

        location / {
            root   /home/xxxxx/dist;
            index  index.html index.htm;
        }

        location /api {
                proxy_pass      http://192.168.6.14:9997/blzq;
        }
    }

你可能感兴趣的:(Linux,nginx)