Nginx

CLI

nginx -V 查看 Nginx配置文件的位置:/opt/homebrew/etc/nginx/nginx.conf

nginx命令启动master进程,nginx分为master进程和worker进程。 master进程负责读取配置文件、管理worker进程;worker进程实际处理HTTP请求。

nginx -t:validate config文件

nginx -s reload: send a reload signal to the master process

nginx调用socket()创建一个套接字,然后再进行 bind()和listen(),在指定端口(127.0.0.1:8080)开始监听. nginx的worker调用accept()和read()来处理HTTP请求。

处理请求

首先,master进程读取配置文件。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
server {
    listen       80; #sky-out
    server_name  localhost;
    location / {
        root   html/sky; #前端文件的相对位置
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
    location /api/ {
    proxy_pass http://localhost:8080/admin/;  # 苍穹外卖后端 API 地址
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    }
}

这一段定义了苍穹外卖的前后端。访问localhost: 80即可访问前端,从前端发送请求时,url前缀为/api的请求会被转发到后端,也就是http://localhost:8080/admin/

负载均衡

1
2
3
4
upstream backend {
    server 127.0.0.1:8081 max_fails=5 fail_timeout=10s weight=1;#黑马点评 1
    server 127.0.0.1:8083 max_fails=5 fail_timeout=10s weight=1;#黑马点评 2
}  
1
2
3
4
    location /api {  
        #proxy_pass http://127.0.0.1:8081;
        proxy_pass http://backend; #该 server 监听在 8082 端口,会把 8082 端口以/api开头的请求以轮训的方式转发到 8081 和 8083 端口
    }

分别在 8081 和 8083 端口启动两个后端服务,然后从浏览器访问

http://localhost:8082/shop-detail.html?id=1

刷新两次,可以看到两个后端服务分别有一次关于数据库的输出内容,说明它们分别处理了一次请求