一、是什么
Nginx 是一个高性能的 HTTP 和反向代理的 Web 服务器,外围特点是占用内存少,并发能力强。
二、利用场景
-
HTTP 服务器
- 高并发(5W 并发连贯),高负载,自身低功耗
- 反向代理服务器
- 负载平衡服务器
- 动静拆散
三、特点
- 跨平台 -> 大多数类 Unix 零碎,以及 Windows
- 上手容易
- 高并发、性能好
- 稳定性好
四、反向代理
1. 正向代理
申请 -> 代理服务器 -> 指标服务器,返回的时候原路返回
2. 反向代理
申请 -> Nginx(裸露的 ip 及端口)-> 实在解决的服务的 ip(暗藏)
Nginx 反向代理到实在服务提供者,依据负载平衡策略,用户只能看到反向代理服务器 Nginx 的端口及 ip。
五、负载平衡
当申请到来时,调配哪个服务解决申请的过程。为了解决服务高负载的问题。
1. 策略: 轮训(默认)
upstream Servers {
server ip:port;
server ip:port;
}
location /path/ {proxy_pass http://Servers/;}
2. 策略: 权重
# 权重越高被调配申请越多
upstream Servers {
server ip:port weight=1;
server ip:port weight=2;
}
3. 基于 ip 的 hash
# 每个申请依照 ip 的 hash 调配后果,批准客户端的申请会分到同一服务提供者,能够解决 session 问题。upstream Servers {
ip_hash;
server ip:port;
server ip:port;
}
六、动静拆散
- 动态资源:html,js,icon 等文件交由 Nginx 路由
-
动静资源:Servlet, 接口 交由服务的 Tomcat
# 动态资源 location /static/ {root /app/static/ # 动态资源目录}
七、命令
./nginx #启动
./nginx -s stop
./nginx -s reload #从新加载配置文件
八、内存模型
- Master 过程用于管制 woker 过程
- worker 过程真正负责工作,独立互不影响
九、配置
# 所有配置以 ; 结尾
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {worker_connections 1024;}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local]"$request" '
# '$status $body_bytes_sent"$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
# 负载平衡
upstream Server {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
server {
listen 80; # 监听端口
server_name localhost; #监听 ip
#charset koi8-r;
#access_log logs/host.access.log main;
location / { # / 代表默认反向代理的状况#
#root html;
#index index.html index.htm;
# 转发到 127.0.0.1:8080
proxy_pass http://127.0.0.1:8080/;
}
# 依据不同门路转发
# 语法:location [= | ~ | ~* | ^~] /URI {…} https://segmentfault.com/a/1190000022315733
location /path/ {
#root html;
#index index.html index.htm;
# 转发到 127.0.0.1:8081
# proxy_pass http://127.0.0.1:8081/;
# 负载平衡形式
proxy_pass http://Server/;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {root html;}
}
}