1987WEB视界-分享互联网热门产品和行业

您现在的位置是:首页 > 域名 > 正文

域名

Nginx部署与域名代理配置

1987web2023-01-07域名259
Nginx(enginex)是一个高性能的HTTP

Nginx (engine x) 是一个高性能的HTTP反向代理web 服务器

一、安装必要依赖

1. yum

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

2. pcre

cd/usr/local/src/
wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
tar zxvf pcre-8.35.tar.gzcdpcre-8.35
./configure
make&&make install检查安装结果pcre-config --version

二、安装Nginx

cd /usr/local/src/
wget https://nginx.org/download/nginx-1.16.0.tar.gz
tar zxvf nginx-1.16.0.tar.gz
cd nginx-1.16.0
./configure --prefix=/usr/local/nginx
make && make install

按照如上过程安装后,可执行文件在如下目录,可以直接启动并检查安装情况

/usr/local/nginx/sbin/nginx 
netstat -ntlp | grep nginx

检查完毕后可以为nginx配置service

vi /lib/systemd/system/nginx.service

 加入如下内容 ------------
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target*
 -------------------------

pkill nginx    关闭先前手动启动的 Nginx

systemctl status nginx
systemctl start nginx
systemctl status nginx

三、配置Nginx

1. 基本操作

conf - 编辑配置文件
cd /usr/local/nginx/conf
vi nginx.conf

 test-conf - 测试配置文件可用性
/usr/local/nginx/sbin/nginx -t

 reload - 重新载入配置文件
systemctl reload nginx

2. 域名代理

使用Nginx配置域名代理,首先要将域名解析绑定到Nginx所在的公网ip。配置域名解析时,需要通过通配符的方式来增加一级通配域名,这样才能通过Nginx实现该级域名的分配与代理转发。即该级域名下的所有请求会被解析到Nginx的80端口,交由Nginx进行代理。

例如,我们希望通过Nginx来为example.com分配三级域名,Nginx所在环境的公网ip为xx.xx.xx.xx。需要将*.example.com的域名解析到xx.xx.xx.xx

在完成域名解析的配置后,需要在nginx的配置文件中具体配置代理转发的规则。在此不详细介绍nginx的配置文件内容了,只对如何实现代理转发进行简单说明。

  • 基本HTTP代理
server{listen80;server_nametest1.example.com;location/{proxy_passhttp://127.0.0.1:9091;proxy_pass  http://www.baidu.com/;}}

http{}部分中加入如上 server 配置。

即通过监听本机80端口通过test1.example.com域名来访的请求,将所有path为/下的请求都代理转发到本机的http://127.0.0.1:9091. 当然也可以再代理到其他域名的网站,例如http://www.baidu.com/. location 部分的匹配规则可以根据情况自行调整(例如需要设置同一域名不同path代理到多个服务)

  • Websocket代理
map$http_upgrade$connection_upgrade{defaultupgrade;close;}server{listen80;server_nametest1.example.com;location/{proxy_passhttp://127.0.0.1:9091;proxy_pass  http://www.baidu.com/;proxy_http_version1.1;proxy_connect_timeout5s;proxy_read_timeout60s;proxy_send_timeout30s;proxy_set_headerUpgrade$http_upgrade;proxy_set_headerConnection"$connection_upgrade";}}

http{}部分中加入如上 server 配置。

map的作用是定义一个规则,根据客户端请求中的值,来构造改变connection_upgrade的值,即根据http_upgrade变量的值创建新的变量connection_upgrade。在如上示例中,设置两个规则:1. default 默认为 upgrade;2. http_upgrade为空,connection_upgrade为 close。

在server部分需要加入超时时间的设置,避免websocket连接频繁断开;再利用proxy_set_header加入刚刚我们设置的upgrade参数。超时时间中,proxy_read_timeout - 代理服务器的读超时时间(两次读之间的时间),proxy_send_timeout - upstream的写超时时间(两次写之间的时间)。

  • 载入配置

在完成如上配置后,即可参照基本操作部分的内容,对配置文件进行test并reload。

  • (附)HTTP 与 WebSocket

二者作为可靠的应用层协议,都基于TCP。WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接受信息;HTTP是单向的。WebSocket是需要浏览器和服务器握手进行建立连接的;而HTTP是浏览器发起向服务器的连接,服务器预先并不知道这个连接。

WebSocket在建立握手时,数据是通过HTTP传输的。但是建立之后,在真正传输时候是不需要HTTP协议的。在WebSocket中,只需要服务器和浏览器通过HTTP协议进行一个握手的动作,然后单独建立一条TCP的通信通道进行数据的传送。WebSocket连接的过程是:

(1)客户端发起http请求,经过3次握手后,建立起TCP连接;http请求里存放WebSocket支持的版本号等信息,如:Upgrade、Connection、WebSocket-Version等;(2)服务器收到客户端的握手请求后,同样采用HTTP协议回馈数据;(3)客户端收到连接成功的消息后,开始借助于TCP传输信道进行全双工通信。


References

  • 一台云服务器:CentOS 7
  • 多个一级域名
  • 开发测试过程中,因为某些原因,想要让手头的A、B域名同时指向云服务器的443端口,支持HTTPS。

    Nginx支持TLS协议的SNI扩展(同一个IP上可以支持多个不同证书的域名),只需要重新安装Nginx,使其支持TLS即可。

    Nginx配置多个HTTPS域名