一、安装
直接安装
yum install nginx –y
如果 yum 源缺失的话,如下更新 yum 源【未测试】
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
yum list
二、静态资源
1. 简单使用
# 默认配置,监听 80 端口,请求到 "/usr/share/nginx/html;"
server {listen 80;listen [::]:80;server_name _;root /usr/share/nginx/html;include /etc/nginx/default.d/*.conf;error_page 404 /404.html;location = /404.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}
}# 手动配置,监听 8080 端口,请求到 "/app/index.html"
server {listen 8080;server_name 8080_server;location / {root /app;index index.html;}
}
2. listen 和 server_name
listen | server_name |
---|---|
监听地址,可以是 [ip]:port | 自定义的名称,仅起标识作用,如果多个 server 的标识重复了,不会报错,而是是会根据优先级直接覆盖 |
3. location 参数
起到一个映射作用,将请求路径映射到目标资源
# 请求路径 ---> 目标资源
# http://domain ---> /app/index.html
server {listen 80;server_name index_server;location / {root /app;index index.html; # 如果请求路径为 http://www.bugu-blog.top,则请求会被映射到 "/app/index.html"}
}# 请求路径 ---> 目标资源
# http://domain:8081/css/common.css ---> /app/css/common.css
server {listen 8081;server_name css_server;location /css {root /app;}
}# 请求路径 ---> 目标资源
# http://domain:8082/images/a.png ---> /app/images/a.png
server {listen 8082;server_name image_server;location /images {root /app;}
}
4. 报错【403 forbidden】
多半是因为 root 参数设置的目录的访问权限不足,注意不要将 root 目录配置成
/
或/root
三、反向代理
1. 正向代理与反向代理
区分代理的正反向就看
nginx
是和谁一伙的,它究竟是代表谁
nginx
代表客户端去访问服务端,客户端明确知道nginx就是自己这边的,那就是正向代理
nginx
代表服务端处理客户端请求,客户端根本不知道自己是在向nginx
请求,那就是反向代理
2. proxy_pass 参数
作用:进行 HTTP 代理,转发请求
- 如果
proxy-pass
的地址只配置到端口,不包含/
或其他路径,那么location
将被追加到转发地址中- 如果
proxy-pass
的地址包括/
或其他路径,那么location
将会被proxy-pass
地址后面的参数替换proxy_pass
后面必须跟上/
,否则会出错,并且注意配置目标地址的代理解析
将
location
追加到转发地址中
http://www.bugu-blog.top:8001/index.html ---> http://www.bugu-blog.top:8080/index.html
server {listen 8001;location / {proxy_pass http://www.bugu-blog.top:8080;}
}
将
location
追加到转发地址中
http://www.bugu-blog.top:8002/a/b/index.html ---> http://www.bugu-blog.top:8080/a/b/index.html
server {listen 8002;location /a/b {proxy_pass http://www.bugu-blog.top:8080;}
}
将
location
替换为转发地址后面的参数
http://www.bugu-blog.top:8003/a/b/index.html ---> http://www.bugu-blog.top:8080/index.html
server {listen 8003;location /a/b {proxy_pass http://www.bugu-blog.top:8080/;}
}
将
location
替换为转发地址后面的参数
http://www.bugu-blog.top:8004/index.html ---> http://www.bugu-blog.top:8080/a/b/index.html
server {listen 8004;location / {proxy_pass http://www.bugu-blog.top:8080/a/b/;}
}
将
location
替换为转发地址后面的参数
http://www.bugu-blog.top:8005/a/b/index.html ---> http://www.bugu-blog.top:8080/c/index.html
server {listen 8005;location /a/b {proxy_pass http://www.bugu-blog.top:8080/c/;}
}
3. 设置代理请求 headers【未测试】
用户可以重新定义或追加 header 信息传递给后端服务器。可以包含文本、变量及其组合。默认情况下,仅重定义两个字段:
# 设置 nginx 的主机地址为 proxy_pass 里配置的主机名和端口
proxy_set_header Host $proxy_host;
proxy_set_header Connection close;
由于使用反向代理之后,后端服务无法获取用户的真实IP,所以,一般反向代理都会设置以下 header 信息
location /some/path/ {# 设置 nginx 的主机地址为 nginx 主机 IP 和端口proxy_set_header Host $http_host;# 设置用户端真实的 IP,即客户端 IP 为用户的真实 IP,即客户端 IPproxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://localhost:8088;
}
四、负载均衡
upstream
位于http
上下文中,与server
并列,不要放在server
中upstream
里面的server
属性,语法格式为ip/domain:port [weight= max_fails=3 fail_timeout=30s]
# 1. 监听 80 端口,监听客户端的访问,将请求代理到 "http://XXXXXXXXX"
server {listen 80;location / {proxy_pass http://XXXXXXXXX;}
}# 2. 接收代理过来的请求,根据机制转发到对应的服务器
upstream XXXXXXXXX {# round-robin # 默认采用轮循机制,所以可以省略不写# least-connected # 将下一个请求分配给活动连接数最少的服务器(较为空闲的服务器)# ip_hash # 客户端的 IP 地址将用作哈希键,来自同一个ip的请求会被转发到相同的服务器# 其他机制server 192.168.1.135:8080;server 192.168.1.135:8081;server 192.168.1.135:8082;
}# 3. 代理负载均衡分发过来的请求
server {listen 8080;location / {root /app;}
}
server {listen 8081;location / {root /app/a/b;}
}
server {listen 8082;location / {root /app/c;}
}
五、HTTPS
1. 生成证书
华为云生成 SSL 证书
- server.crt
- server.key
2. 配置 SSL
server {listen 443 ssl;server_name XXXXXXXXXXXXXXXXXX;ssl_certificate /app/server.crt;ssl_certificate_key /app/server.key;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers HIGH:!aNULL:!MD5;location / {proxy_pass http://www.bugu-blog.top:80; # 代理转发到 http 地址}
}
3. 重启 Nginx
systemctl restart nginx
六、参考
-
视频
-
文档