直接安装
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
# 默认配置,监听 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;
}
}
listen | server_name |
---|---|
监听地址,可以是 [ip]:port |
自定义的名称,仅起标识作用,如果多个 server 的标识重复了,不会报错,而是是会根据优先级直接覆盖 |
起到一个映射作用,将请求路径映射到目标资源
# 请求路径 ---> 目标资源
# 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;
}
}
多半是因为 root 参数设置的目录的访问权限不足,注意不要将 root 目录配置成
/
或/root
区分代理的正反向就看
nginx
是和谁一伙的,它究竟是代表谁
nginx
代表客户端去访问服务端,客户端明确知道nginx就是自己这边的,那就是正向代理
nginx
代表服务端处理客户端请求,客户端根本不知道自己是在向nginx
请求,那就是反向代理
作用:进行 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/;
}
}
用户可以重新定义或追加 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,即客户端 IP
proxy_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;
}
}
华为云生成 SSL 证书
- server.crt
- server.key
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 地址
}
}
systemctl restart nginx
视频
文档