Nginx 使用

1. 命令

  • 启动:
    • ./nginx:直接启动
    • ./nginx -c /usr/local/nginx/conf/nginx.conf:指定配置文件启动
  • 检查 Nginx 配置文件:
    • ./nginx -t:检查配置文件是否有语法操作
    • ./nginx -t -c /usr/local/nginx/conf/nginx.conf:显示指定配置文件
  • 重载:
    • ./nginx -s reload:执行重载命令
  • 关闭:
    • ./nginx -s stop:快速停止
    • ./nginx -s quit:完整有序的停止,会等待所有请求结束后再关闭服务

2. 配置文件结构

Nginx 配置文件结构

配置项语法为 项名 项值;,配置文件主要分为四部分:

  • main:全局配置,用于配置与具体业务无关的参数
  • events:用于配置影响 Nginx 服务与用户之间连接的属性
  • http:用于配置 Nginx 的业务功能,包括 http、email 等
  • server:必须位于 http 内部,可配置多个,每个用于配置一个主机,其中:
    • listen 指定监听的端口号
    • server_name 指定主机名
    • location 配置请求的路由,以及各种页面的处理情况

3. 配置文件实战

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
user administrator administrators;  #配置用户或者组,默认为 nobody nobody
worker_processes 2; #允许生成的进程数,默认为1
pid /nginx/pid/nginx.pid; #指定 nginx 进程运行文件存放地址
error_log log/error.log debug; #制定全局日志路径、级别

events {
worker_connections 1024; #最大连接数,默认为512
accept_mutex on; #设置网路连接序列化,防止惊群现象发生,默认为 on
multi_accept on; #设置一个进程是否同时接受多个网络连接,默认为 off
}

http {
include mime.types; #文件扩展名与文件类型映射表
include /home/data/*.conf; #子配置文件路径
default_type application/octet-stream; #默认文件类型,默认为 text/plain
sendfile on; #允许 sendfile 方式传输文件,默认为 off
sendfile_max_chunk 100k; #每个进程每次调用传输量最大值,默认为 0,无限制
keepalive_timeout 65; #连接超时时间,默认为75s

# add_header X-Content-Type-Options nosniff; # 设置全局请求头

upstream my_svr {
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; #热备
}

error_page 404 https://www.baidu.com; #错误页

server {
listen 4545; #监听端口
server_name localhost; #监听地址

location ~*^.+$ { #请求的路由,正则匹配,~为区分大小写,~*为不区分大小写
#root /home/data; #根目录
#index index.html index.htm; #设置默认页
proxy_pass http://my_svr; #请求转向mysvr 定义的服务器列表
proxy_set_header Host $host:$server_port; # 设置自定义header
deny 127.0.0.1; #拒绝的ip
allow 172.18.5.54; #允许的ip
}
}
}

4. FAQ

1. rootalias 的区别

  • root:直接拼接 root + location
  • alias:是用 alias 替换 location
1
2
3
4
5
# 当请求 /aa/index.html 时,不同配置返回不同
location /aa/ {
root /data/my/; # 返回 /data/my/aa/index.html
alias /data/my/; # 返回 /data/my/index.html
}

2. location

  • proxy_pass 配置代理地址后,转发地址
  • 有目录(包括/):代理地址 + url 目录部分去除 location 匹配目录
  • 无任何地址:代理地址 + url 目录部分
1
2
3
4
5
6
7
8
9
# 测试地址: http://127.0.0.1:80/api/upload,实际访问地址与配置有关
location /api/ {
proxy_pass http://127.0.0.1:8080/; # http://127.0.0.1:8080/upload
proxy_pass http://127.0.0.1:8080; # http://127.0.0.1:8080/api/upload
}
location /api {
proxy_pass http://127.0.0.1:8080/; # http://127.0.0.1:8080//upload
proxy_pass http://127.0.0.1:8080; # http://127.0.0.1:8080/api/upload
}