Nginx如何配置Http、Https、WS、WSS的方法步骤


Posted in Servers onMay 11, 2021

写在前面

当今互联网领域,Nginx是使用最多的代理服务器之一,很多大厂在自己的业务系统中都是用了Nginx作为代理服务器。所以,我们有必要了解下Nginx对于Http、Https、WS、WSS的各项配置。来来来,跟冰河一些学习Nginx,一起进阶,一起头秃~~

Nginx配置Http

首先,我们来聊聊Nginx如何配置Http,Nginx配置Http是Nginx最常用的功能之一。在nginx.conf中配置相应的信息,如下所示。

upstream message {
  server localhost:8080 max_fails=3;
}

server {
 listen       80;
 server_name  localhost;

 location / {
  root   html;
  index  index.html index.htm;
  #允许cros跨域访问 
  add_header 'Access-Control-Allow-Origin' '*';
  #proxy_redirect default;
  #跟代理服务器连接的超时时间,必须留意这个time out时间不能超过75秒,当一台服务器当掉时,过10秒转发到另外一台服务器。
  proxy_connect_timeout 10;
 }
 
  location /message {
    proxy_pass                  http://message;
    proxy_set_header Host $host:$server_port;
 }
}

此时,访问 http://localhost/message,就会被转发到 http://localhost:8080/message 上。

Nginx配置Https

如果业务对于网站的安全性要求比较高,此时可能就会在Nginx配置Https,具体配置信息可以参照如下方式进行。

upstream message {
  server localhost:8080 max_fails=3;
}

server {
 listen       443 ssl;
 server_name localhost;
 ssl_certificate    /usr/local/nginx-1.17.8/conf/keys/binghe.pem;
 ssl_certificate_key /usr/local/nginx-1.17.8/conf/keys/binghe.key;
 ssl_session_timeout 20m;
 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 ssl_prefer_server_ciphers on;
 ssl_verify_client off;
 location / {
  root   html;
  index  index.html index.htm;
  #允许cros跨域访问 
  add_header 'Access-Control-Allow-Origin' '*';
  #跟代理服务器连接的超时时间,必须留意这个time out时间不能超过75秒,当一台服务器当掉时,过10秒转发到另外一台服务器。
  proxy_connect_timeout 10;
 }
 
  location /message {
    proxy_pass                  http://message;
    proxy_set_header Host $host:$server_port;
 }
}

此时访问https://localhost/message 就会被转发到 http://localhost:8080/message上。

Nginx配置WS

WS的全称是WebSocket,Nginx配置WebSocket也比较简单,只需要在nginx.conf文件中进行相应的配置。这种方式很简单,但是很有效,能够横向扩展WebSocket服务端的服务能力。

为了方便小伙伴们更好的理解,这里,我重点说下Nginx配置WS。

先直接展示配置文件,如下所示(使用的话直接复制,然后改改ip和port即可)

map $http_upgrade $connection_upgrade { 
 default upgrade; 
 '' close; 
} 
upstream wsbackend{ 
 server ip1:port1; 
 server ip2:port2; 
 keepalive 1000;
} 
 
server { 
 listen 20038; 
 location /{ 
  proxy_http_version 1.1; 
  proxy_pass http://wsbackend; 
  proxy_redirect off; 
  proxy_set_header Host $host; 
  proxy_set_header X-Real-IP $remote_addr; 
  proxy_read_timeout 3600s; 
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
  proxy_set_header Upgrade $http_upgrade; 
  proxy_set_header Connection $connection_upgrade; 
 } 
}

接下来,我们就分别分析上述配置的具体含义。

首先:

map $http_upgrade $connection_upgrade { 
 default upgrade; 
 '' close; 
}

表示的是:

  • 如果$http_upgrade 不为 '' (空), 则$connection_upgrade 为 upgrade 。
  • 如果$http_upgrade 为 '' (空), 则 $connection_upgrade 为 close。

其次:

upstream wsbackend{ 
 server ip1:port1; 
 server ip2:port2; 
 keepalive 1000; 
}

表示的是 nginx负载均衡:

两台服务器 (ip1:port1)和(ip2:port2) 。

keepalive 1000 表示的是每个nginx进程中上游服务器保持的空闲连接,当空闲连接过多时,会关闭最少使用的空闲连接.当然,这不是限制连接总数的,可以想象成空闲连接池的大小,设置的值应该是上游服务器能够承受的。

最后:

server { 
 listen 20038; 
 location /{ 
  proxy_http_version 1.1; 
  proxy_pass http://wsbackend; 
  proxy_redirect off;
  proxy_set_header Host $host; 
  proxy_set_header X-Real-IP $remote_addr; 
  proxy_read_timeout 3600s; 
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
  proxy_set_header Upgrade $http_upgrade; 
  proxy_set_header Connection $connection_upgrade; 
 } 
}

表示的是监听的服务器的配置

  • listen 20038 表示 nginx 监听的端口
  • locations / 表示监听的路径(/表示所有路径,通用匹配,相当于default)
  • proxt_http_version 1.1 表示反向代理发送的HTTP协议的版本是1.1,HTTP1.1支持长连接
  • proxy_pass http://wsbackend; 表示反向代理的uri,这里可以使用负载均衡变量
  • proxy_redirect off; 表示不要替换路径,其实这里如果是/则有没有都没关系,因为default也是将路径替换到proxy_pass的后边
  • proxy_set_header Host $host; 表示传递时请求头不变, $host是nginx内置变量,表示的是当前的请求头,proxy_set_header表示设置请求头
  • proxy_set_header X-Real-IP $remote_addr; 表示传递时来源的ip还是现在的客户端的ip
  • proxy_read_timeout 3600s; 表的两次请求之间的间隔超过 3600s 后才关闭这个连接,默认的60s,自动关闭的元凶
  • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 表示X-Forwarded-For头不发生改变
  • proxy_set_header Upgrade $http_upgrade; 表示设置Upgrade不变
  • proxy_set_header Connection $connection_upgrade; 表示如果 $http_upgrade为upgrade,则请求为upgrade(websocket),如果不是,就关闭连接

此时,访问 ws://localhost:20038 就会被转发到 ip1:port1 和 ip2:port2 上。

Nginx配置WSS

WSS表示WebSocket + Https,通俗点说,就是安全的WebSocket,接下来,我们来看看如何配置WSS。在配置WS时,详细描述了配置的细节信息,这里,我就不详细介绍了。

map $http_upgrade $connection_upgrade { 
 default upgrade; 
 '' close; 
} 
upstream wsbackend{ 
 server ip1:port1; 
 server ip2:port2; 
 keepalive 1000; 
} 
server{
 listen 20038 ssl;
 server_name localhost;
 ssl_certificate    /usr/local/nginx-1.17.8/conf/keys/binghe.com.pem;
 ssl_certificate_key /usr/local/nginx-1.17.8/conf/keys/binghe.com.key;
 ssl_session_timeout 20m;
 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 ssl_prefer_server_ciphers on;
 ssl_verify_client off;
 location /{
   proxy_http_version 1.1;
   proxy_pass http://wsbackend;
   proxy_redirect off; 
   proxy_set_header Host $host; 
   proxy_set_header X-Real-IP $remote_addr; 
   proxy_read_timeout 3600s; 
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
   proxy_set_header Upgrade $http_upgrade; 
   proxy_set_header Connection $connection_upgrade; 
 }
}

此时,访问 wss://localhost:20038 就会被转发到 ip1:port1 和 ip2:port2 上。

到此这篇关于Nginx如何配置Http、Https、WS、WSS的方法步骤的文章就介绍到这了,更多相关Nginx配置Http、Https、WS、WSS内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Servers 相关文章推荐
Filebeat 采集 Nginx 日志的方法
Mar 31 Servers
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
May 27 Servers
nginx内存池源码解析
Nov 20 Servers
iSCSI服务器CHAP双向认证配置
Apr 01 Servers
CentOS7和8下安装Maven3.8.4
Apr 07 Servers
忘记Grafana不要紧2种Grafana重置admin密码方法详细步骤
Apr 07 Servers
阿里云日志过滤器配置日志服务
Apr 09 Servers
阿里云ECS云服务器快照的概念以及如何使用
Apr 21 Servers
docker 制作mysql镜像并自动安装
May 20 Servers
Nginx 配置 HTTPS的详细过程
May 30 Servers
安装harbor作为docker镜像仓库的问题
Jun 14 Servers
超越Nginx的Web服务器caddy优雅用法
Jun 21 Servers
windows下快速安装nginx并配置开机自启动的方法
uwsgi+nginx代理Django无法访问静态资源的解决
May 10 #Servers
教你快速开启Apache SkyWalking的自监控
Apache Calcite 实现方言转换的代码
Apr 24 #Servers
apache基于端口创建虚拟主机的示例
Apr 24 #Servers
Nginx进程管理和重载原理详解
详解Apache SkyWalking 告警配置指南
Apr 22 #Servers
You might like
php MySQL与分页效率
2008/06/04 PHP
PHP mb_convert_encoding 获取字符串编码类型实现代码
2009/04/26 PHP
PHP初学者常见问题集合 修正版(21问答)
2010/03/23 PHP
PHP判断数组是否为空的常用方法(五种方法)
2017/02/08 PHP
javascript 数组排序函数
2009/08/20 Javascript
javascript中检测变量的类型的代码
2010/12/28 Javascript
js 函数调用模式小结
2011/12/26 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
初步使用Node连接Mysql数据库
2016/03/03 Javascript
javascript中错误使用var造成undefined
2016/03/31 Javascript
AngularJS控制器详解及示例代码
2016/08/16 Javascript
使用JS读取XML文件的方法
2016/11/25 Javascript
详解Nodejs的timers模块
2016/12/22 NodeJs
详解vue2.0组件通信各种情况总结与实例分析
2017/03/22 Javascript
简单实现js上传文件功能
2017/08/21 Javascript
Vue使用枚举类型实现HTML下拉框步骤详解
2018/02/05 Javascript
微信小程序的部署方法步骤
2018/09/04 Javascript
Vue 实现列表动态添加和删除的两种方法小结
2018/09/07 Javascript
基于jquery ajax的多文件上传进度条过程解析
2019/09/11 jQuery
VUE+elementui组件在table-cell单元格中绘制微型echarts图
2020/04/20 Javascript
javascript 函数的暂停和恢复实例详解
2020/04/25 Javascript
[56:47]Ti4 循环赛第三日 iG vs Liquid
2014/07/12 DOTA
python求众数问题实例
2014/09/26 Python
Python最基本的数据类型以及对元组的介绍
2015/04/14 Python
python实现指定字符串补全空格的方法
2015/04/30 Python
python通过zabbix api获取主机
2018/09/17 Python
Python日志无延迟实时写入的示例
2019/07/11 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
2019/07/15 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
2019/07/22 Python
python之array赋值技巧分享
2019/11/28 Python
Python爬虫与反爬虫大战
2020/07/30 Python
2014基建处领导班子“四风”对照检查材料思想汇报
2014/10/04 职场文书
长城导游词300字
2015/01/30 职场文书
学生会任命书范本
2015/09/21 职场文书
确保减税降费落地生根,用实实在在措施
2019/07/19 职场文书
python基础之停用词过滤详解
2021/04/21 Python