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