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
windows下快速安装nginx并配置开机自启动的方法
May 11 Servers
了解Kubernetes中的Service和Endpoint
Apr 01 Servers
Windows Server 2016 配置 IIS 的详细步骤
Apr 28 Servers
Ubuntu Server 安装Tomcat并配置systemctl
Apr 28 Servers
Nginx HTTP跳转至HTTPS
May 15 Servers
使用Apache Camel表达REST服务的方法
Jun 10 Servers
Docker与K8s关系介绍不会Docker也可以使用K8s
Jun 25 Servers
nginx之内存池的实现
Jun 28 Servers
Linux中sftp常用命令整理
Jun 28 Servers
nginx sticky实现基于cookie负载均衡示例详解
Dec 24 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
MySql 按时间段查询数据方法(实例说明)
2008/11/02 PHP
PHP 图片文件上传实现代码
2010/12/29 PHP
关于zend studio 出现乱码问题的总结
2013/06/23 PHP
PHP扩展模块Pecl、Pear以及Perl的区别
2014/04/09 PHP
WordPress分页伪静态加html后缀
2016/06/08 PHP
Yii2.0中使用js异步删除示例
2017/03/10 PHP
优化网页之快速的呈现我们的网页
2007/06/29 Javascript
PHP 与 js的通信(via ajax,json)
2010/11/16 Javascript
jquery.fileEveryWhere.js 一个跨浏览器的file显示插件
2011/10/24 Javascript
javascript 星级评分效果(手写)
2012/12/24 Javascript
javascript将浮点数转换成整数的三个方法
2014/06/23 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
JS实现仿京东淘宝竖排二级导航
2014/12/08 Javascript
AngularJS基础学习笔记之表达式
2015/05/10 Javascript
js弹出对话框方式小结
2015/11/17 Javascript
JavaScript脚本库编写的方法
2015/12/09 Javascript
jQuery 获取多选框的值及多选框中文的函数
2016/05/16 Javascript
javascript代码调试之console.log 用法图文详解
2016/09/30 Javascript
Bootstrap基本插件学习笔记之轮播幻灯片(23)
2016/12/08 Javascript
JavaScript中数组的各种操作的总结(必看篇)
2017/02/13 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
2018/09/27 Javascript
Python牛刀小试密码爆破
2011/02/03 Python
Python字典操作简明总结
2015/04/13 Python
PyCharm搭建Spark开发环境的实现步骤
2019/09/05 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
2020/03/23 Python
浅谈Python中os模块及shutil模块的常规操作
2020/04/03 Python
基于Python实现全自动下载抖音视频
2020/11/06 Python
css3实现圆锥渐变conic-gradient效果
2020/02/12 HTML / CSS
加拿大购物频道:The Shopping Channel
2016/07/21 全球购物
Zipadee-Zip襁褓过渡毯:Sleeping Baby
2018/12/30 全球购物
Java面向对象面试题
2016/12/26 面试题
Ruby如何定义一个类
2012/10/08 面试题
五年级科学教学反思
2014/02/05 职场文书
2015教师节师德演讲稿
2015/03/19 职场文书
小学生家长意见
2015/06/03 职场文书
pytorch model.cuda()花费时间很长的解决
2021/06/01 Python