Nginx部署
Nginx是一款輕量級(jí)的Web
服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)
代理服務(wù)器。其特點(diǎn)是占有內(nèi)存少,并發(fā)能力強(qiáng)。可以做為EasySwoole
的前置服務(wù)器,實(shí)現(xiàn)負(fù)載均衡等。
Dockerfile
FROM centos:8
RUN yum install -y nginx
VOLUME ["/data"]
RUN echo " \
user nginx; \
worker_processes auto; \
error_log /var/log/nginx/error.log; \
pid /run/nginx.pid; \
include /usr/share/nginx/modules/*.conf; \
events { \
worker_connections 1024; \
} \
http { \
sendfile on; \
tcp_nopush on; \
tcp_nodelay on; \
keepalive_timeout 65; \
types_hash_max_size 2048; \
include /etc/nginx/mime.types; \
default_type application/octet-stream; \
include /etc/nginx/conf.d/*.conf; \
include /data/*.conf; \
} " > /etc/nginx/nginx.conf
WORKDIR /hello
RUN cd /hello && echo "hello world" > index.html
RUN echo " \
server { \
listen 80; \
server_name _; \
location / { \
root /hello; \
} \
} " > /etc/nginx/conf.d/hello.conf
EXPOSE 80
EXPOSE 443
Docker使用
docker pull easyswoole/nginx
# 啟動(dòng)容器
docker run --privileged -tid -p 80:80 -p 443:443 easyswoole/nginx /usr/sbin/init
# 進(jìn)入容器
docker exec -ti {CONTAINER ID} bash
# 檢查配置文件語(yǔ)法
nginx -t
# 啟動(dòng)nginx
nginx
# 停止nginx
nginx -s stop
可以自己?jiǎn)?dòng)的時(shí)候-v掛載配置文件目錄到/data ,并可以根據(jù)實(shí)際情況再-v掛載一個(gè)目錄用于存放靜態(tài)文件
http代理
# 配置EasySwoole節(jié)點(diǎn) 至少需要一個(gè)
upstream easyswoole {
server 127.0.0.1:9501;
server 127.0.0.1:9502;
server 127.0.0.1:9503;
}
server {
# nginx所監(jiān)聽(tīng)端口
listen 80;
# 域名
server_name proxy.easyswoole.com;
location / {
# 將客戶(hù)端host及ip信息轉(zhuǎn)發(fā)到對(duì)應(yīng)節(jié)點(diǎn)
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 轉(zhuǎn)發(fā)Cookie,設(shè)置 SameSite
proxy_cookie_path / "/;";
# 代理訪(fǎng)問(wèn)真實(shí)服務(wù)器
proxy_pass http://easyswoole;
}
}
websocket代理
# 配置EasySwoole節(jié)點(diǎn) 至少需要一個(gè)
upstream easyswoole {
# 將負(fù)載均衡模式設(shè)置為IP hash,作用:不同的客戶(hù)端每次請(qǐng)求都會(huì)與同一節(jié)點(diǎn)進(jìn)行交互。
ip_hash;
server 127.0.0.1:9501;
server 127.0.0.1:9502;
server 127.0.0.1:9503;
}
server {
listen 80;
server_name websocket.easyswoole.com;
location / {
# websocket的header
proxy_http_version 1.1;
# 升級(jí)http1.1到websocket協(xié)議
proxy_set_header Upgrade websocket;
proxy_set_header Connection "Upgrade";
# 將客戶(hù)端host及ip信息轉(zhuǎn)發(fā)到對(duì)應(yīng)節(jié)點(diǎn)
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass_request_body on;
proxy_pass_request_headers on;
# 客戶(hù)端與服務(wù)端60s之內(nèi)無(wú)交互,將自動(dòng)斷開(kāi)連接。
proxy_read_timeout 60s ;
# 代理訪(fǎng)問(wèn)真實(shí)服務(wù)器
proxy_pass http://easyswoole;
}
}
注意: 當(dāng)配置了 升級(jí) http1.1 到 websocket協(xié)議,如 proxy_set_header Upgrade websocket; proxy_set_header Connection "Upgrade";
上述配置強(qiáng)制兼容 WebSocket
的時(shí)候。非表單類(lèi)數(shù)據(jù),將無(wú)法代理給上游服務(wù)器。