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实现发布静态资源的方法
Mar 31 Servers
nginx反向代理时如何保持长连接
Mar 31 Servers
uwsgi+nginx代理Django无法访问静态资源的解决
May 10 Servers
windows下快速安装nginx并配置开机自启动的方法
May 11 Servers
从零开始在Centos7上部署SpringBoot项目
Apr 07 Servers
nginx配置之并发频次限制
Apr 18 Servers
Tomcat starup.bat 脚本实现开机自启动
Apr 20 Servers
Tomcat项目启动失败的原因和解决办法
Apr 20 Servers
使用 DataAnt 监控 Apache APISIX的原理解析
Jul 07 Servers
Linux在两个服务器直接传文件的操作方法
Aug 05 Servers
教你使用RustDesk 搭建一个自己的远程桌面中继服务器
Aug 14 Servers
zabbix如何添加监控主机和自定义监控项
Aug 14 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
ThinkPHP3.1新特性之Action参数绑定
2014/06/19 PHP
php操作mongoDB实例分析
2014/12/29 PHP
PHP中的socket_read和socket_recv区别详解
2015/02/09 PHP
PHP实现生成带背景的图形验证码功能
2016/10/03 PHP
Javascript客户端脚本的设计和应用
2006/08/21 Javascript
服务端 VBScript 与 JScript 几个相同特性的写法 By shawl.qiu
2007/03/06 Javascript
JS自动适应的图片弹窗实例
2013/06/29 Javascript
jQuery实现右下角可缩放大小的层完整实例
2016/06/20 Javascript
React.js中常用的ES6写法总结(推荐)
2017/05/09 Javascript
Angular2使用Angular CLI快速搭建工程(一)
2017/05/21 Javascript
最简单的vue消息提示全局组件的方法
2019/06/16 Javascript
JS实现利用闭包判断Dom元素和滚动条的方向示例
2019/08/26 Javascript
[02:06]DOTA2英雄基础教程 暗影萨满
2013/12/16 DOTA
[05:31]DOTA2英雄梦之声_第08期_莉娜
2014/06/23 DOTA
python实现上传样本到virustotal并查询扫描信息的方法
2014/10/05 Python
使用graphics.py实现2048小游戏
2015/03/10 Python
Python运算符重载用法实例分析
2015/06/01 Python
python如何通过twisted实现数据库异步插入
2018/03/20 Python
Python制作简单的剪刀石头布游戏
2020/12/10 Python
通用的Django注册功能模块实现方法
2021/02/05 Python
CSS3的first-child选择器实战攻略
2016/04/28 HTML / CSS
写好求职应聘自荐信的三部曲
2013/09/21 职场文书
法律工作求职自荐信
2013/10/31 职场文书
委托证明的格式
2014/01/10 职场文书
会展策划与管理专业大学生职业生涯规划
2014/02/07 职场文书
《再别康桥》教学反思
2014/02/12 职场文书
高校教师自荐信范文
2014/03/13 职场文书
汽车运用工程专业求职信
2014/06/18 职场文书
2014年环卫工作总结
2014/11/22 职场文书
毕业欢送会致辞
2015/07/29 职场文书
2016年校园社会综合治理宣传月活动总结
2016/03/16 职场文书
JS如何使用剪贴板操作Clipboard API
2021/05/17 Javascript
Java实现二分搜索树的示例代码
2022/03/17 Java/Android
Python用tkinter实现自定义记事本的方法详解
2022/03/31 Python
Python中time与datetime模块使用方法详解
2022/03/31 Python
Win11怎么解除儿童账号限制?Win11解除微软儿童账号限制方法
2022/07/07 数码科技