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 相关文章推荐
Nginx tp3.2.3 404问题解决方案
Mar 31 Servers
基于Nginx实现限制某IP短时间访问次数
Mar 31 Servers
Nginx反向代理及负载均衡如何实现(基于linux)
Mar 31 Servers
Apache Calcite 实现方言转换的代码
Apr 24 Servers
centos8安装nginx1.9.1的详细过程
Aug 02 Servers
Kubernetes关键组件与结构组成介绍
Mar 31 Servers
CentOS下安装Jenkins的完整步骤
Apr 07 Servers
Linux服务器离线安装 nginx的详细步骤
Jun 16 Servers
超越Nginx的Web服务器caddy优雅用法
Jun 21 Servers
Nginx开源可视化配置工具NginxConfig使用教程
Jun 21 Servers
Nginx使用ngx_http_upstream_module实现负载均衡功能示例
Aug 05 Servers
VMware虚拟机安装 Windows Server 2022的详细图文教程
Sep 23 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
保证JavaScript和Asp、Php等后端程序间传值编码统一
2009/04/17 Javascript
通用javascript脚本函数库 方便开发
2009/10/13 Javascript
Extjs4 Treegrid 使用心得分享(经验篇)
2013/07/01 Javascript
js动态给table添加/删除tr的方法
2013/08/02 Javascript
js输出阴历、阳历、年份、月份、周示例代码
2014/01/29 Javascript
用js闭包的方法实现多点标注冒泡示例
2014/05/29 Javascript
javascript实现单击和双击并存的方法
2014/12/13 Javascript
js操作数据库实现注册和登陆的简单实例
2016/05/26 Javascript
JavaScript 对象详细整理总结
2016/09/29 Javascript
关于Vue.js一些问题和思考学习笔记(1)
2016/12/02 Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
2016/12/16 Javascript
Angular的$http与$location
2016/12/26 Javascript
Bootstrap表单制作代码
2017/03/17 Javascript
JS实现的二叉树算法完整实例
2017/04/06 Javascript
jQuery实现手势解锁密码特效
2017/08/14 jQuery
Vue中的Vux配置指南
2017/12/08 Javascript
Vue-Router模式和钩子的用法
2018/02/28 Javascript
select2 ajax 设置默认值,初始值的方法
2018/08/09 Javascript
element-ui循环显示radio控件信息的方法
2018/08/24 Javascript
解决微信小程序云开发中获取数据库的内容为空的方法
2019/05/15 Javascript
Vue 实现登录界面验证码功能
2020/01/03 Javascript
Javascript var变量删除原理及实现
2020/08/26 Javascript
jQuery+ajax实现文件上传功能
2020/12/22 jQuery
Python装饰器用法实例总结
2018/02/07 Python
python使用json序列化datetime类型实例解析
2018/02/11 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
python实现超级玛丽游戏
2020/03/18 Python
基于nexus3配置Python仓库过程详解
2020/06/15 Python
西铁城美国官方网站:Citizen Watch美国
2019/11/08 全球购物
UNIX特点都有哪些
2016/04/05 面试题
疾病捐款倡议书
2014/05/13 职场文书
做一个有道德的人演讲稿
2014/05/14 职场文书
小学秋季运动会报道稿
2014/09/30 职场文书
信访工作个人总结
2015/03/03 职场文书
升职自荐信范文
2015/03/27 职场文书
利用js实现简单开关灯代码
2021/11/23 Javascript