Nginx 常用操作的总结

一、安装

直接安装

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,即客户端 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;
    }
}

五、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

六、参考

  • 视频

  • 文档

你可能感兴趣的:(Linux,nginx,linux)