当前位置: 首页 > 科技观察

本文带你了解Nginx如何配置Http、Https、WS、WSS!

时间:2023-03-22 14:00:35 科技观察

作者个人研发在高并发场景下提供了一个简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。开源半年多以来,已成功为十几家中小企业提供精准定时调度解决方案,经受住了生产环境的考验。为了造福更多童鞋,这里提供一个开源框架地址:https://github.com/sunshinelyz/mykit-delay写的比较早,在当今互联网领域,Nginx是使用最多的代理服务器之一。Nginx作为业务系统中的代理服务器。因此,我们有必要了解一下Nginx对于Http、Https、WS、WSS的各种配置。来来来,和冰河一起学习Nginx,一起进步,一起秃头~~Nginx配置Http首先来说说Nginx是如何配置Http的,Nginx配置Http是Nginx最常用的功能之一。在nginx.conf中配置相应的信息,如下图。upstreammessage{serverlocalhost:8080max_fails=3;}server{listen80;server_namelocalhost;location/{roothtml;indexindex.htmlindex.htm;#允许cros跨域访问add_header'Access-Control-Allow-Origin''*';#proxy_redirectdefault;#与代理服务器连接的超时时间一定要注意,超时时间不能超过75秒。当一个服务器崩溃时,它会在10秒后转发到另一个服务器。proxy_connect_timeout10;}location/message{proxy_passhttp://message;proxy_set_headerHost$host:$server_port;}}此时访问http://localhost/message会被转发到http://localhost:8080/message。在Nginx上配置Https如果业务对网站的安全性要求高,此时可以在Nginx上配置Https。具体配置信息请参考以下方法。upstreammessage{serverlocalhost:8080max_fails=3;}server{listen443ssl;server_namelocalhost;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_timeout20m;ssl_ciphersECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;ssl_protocolsTLSv1TLSv1.1TLSv1.2;ssl_prefer_server_cipherson;ent_off;ssl_location/{roothtml;indexindex.htmlindex.htm;#允许cros跨域访问add_header'Access-Control-Allow-Origin''*';#连接代理服务器的超时时间,这个一定要注意超时时间不能超过75秒,当一个服务器宕机,10秒后会转发到另一个服务器。proxy_connect_timeout10;}location/message{proxy_passhttp://message;proxy_set_headerHost$host:$server_port;}}此时访问https://localhost/message会被转发到http://localhost:8080/message。Nginx配置WSWS的全称是WebSocket,Nginx配置WebSocket也比较简单,只需要在nginx.conf文件中做相应的配置即可。这种方法非常简单,但是非常有效,可以横向扩展WebSocket服务器的服务能力。为了方便小伙伴们更好的理解,这里,我重点介绍在Nginx中配置WS。先直接显示配置文件,如下图(要用就直接复制,然后改ip和端口)keepalive1000;}server{listen20038;location/{proxy_http_version1.1;proxy_passhttp://wsbackend;proxy_redirectoff;proxy_set_headerHost$host;proxy_set_headerX-Real-IP$remote_addr;proxy_read_timeout3600s;proxy_set_headerX-Forwarded-For$proxy_add_set_forproxy$upwardedhttp_upgrade;proxy_set_headerConnection$connection_upgrade;}}接下来我们分析一下上面配置的具体含义。首先:map$http_upgrade$connection_upgrade{defaultupgrade;''close;}意思是:如果$http_upgrade不是''(空),那么$connection_upgrade就是升级。如果$http_upgrade为''(空),则$connection_upgrade关闭。其次:upstreamwsbackend{serverip1:port1;serverip2:port2;keepalive1000;}表示nginx负载均衡:两台服务器(ip1:port1)和(ip2:port2)。keepalive1000表示每个nginx进程中上游服务器保持的空闲连接。当空闲连接过多时,将关闭最少使用的空闲连接。当然,这并不限制连接总数。可以想象成空闲连接池的大小。Set的值应该是上游服务器可以接受的。最后:server{listen20038;location/{proxy_http_version1.1;proxy_passhttp://wsbackend;proxy_redirectoff;proxy_set_headerHost$host;proxy_set_headerX-Real-IP$remote_addr;proxy_read_timeout3600s;proxy_set_headerX-Forwarded-For$proxy_add_x_forwardedproxy_set_foradgroxy_addr;;}}表示监听服务器的配置listen20038表示nginx监听的端口位置/表示监听路径(/表示所有路径,通用匹配,相当于默认)proxt_http_version1.1表示反向代理发送的HTTP的版本协议是1.1,HTTP1.1支持长连接proxy_passhttp://wsbackend;表示反向代理的uri,这里可以使用负载均衡变量proxy_redirectoff;表示不替换路径,其实是/不是都无所谓,因为default也替换了proxy_pass后面的路径proxy_set_headerHost$host;表示传递时请求头不变,$host为nginx内置变量,表示当前请求头,proxy_set_header表示设置请求头proxy_set_headerX-Real-IP$remote_addr;表示源ip还是当前client的ipproxy_read_timeout3600s;表的两次请求间隔超过3600s后关闭连接,默认60s,自动关闭的罪魁祸首是proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;表示X-Forwarded-Forheader不改变proxy_set_header升级$http_upgrade;表示设置Upgrade不变proxy_set_headerConnection$connection_upgrade;表示如果$http_upgrade是upgrade,则请求是upgrade(websocket),如果不是,则关闭连接此时会阻塞访问ws://localhost:20038转发到ip1:port1和ip2:port2,并配置WSSWSSonNginx表示WebSocket+Https。通俗地说,它是一个安全的WebSocket。接下来,让我们看看如何配置WSS。在配置WS的时候,配置的细节都有详细的说明,这里就不详细介绍了。map$http_upgrade$connection_upgrade{defaultupgrade;''close;}upstreamwsbackend{serverip1:port1;serverip2:port2;keepalive1000;}server{listen20038ssl;server_namelocalhost;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_timeout20m;ssl_ciphersECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;ssl_protocolsTLSv1TLSv1.1TLSv1.2;ssl_prefer_server_cipherson;ssl_verify_clientoff;location/{proxy_http_version1.1;proxy_passhttp://wsbackend;proxy_redirectoff;proxy_set_headerHost$host;proxy_set_header$X-read_add-Real_IP?0s;proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;proxy_set_headerUpgrade$http_upgrade;proxy_set_headerConnection$connection_upgrade;}}此时访问wss://localhost:20038会被转发到ip1:port1和ip2:port2。本文转载自微信公众号“银禾科技”,可通过以下二维码关注。转载本文请联系冰川科技公众号。