Nginx(2)常用配置解析

20次阅读

Nginx(2)常用配置解析

原文链接

安装文件夹

  • path/nginx/conf.d/`是子配置存放处,`path/nginx/conf/nginx.conf主配置文件会默认把这个文件夹中所有的子配置项都引入
  • path/nginx/html静态文件夹都放在这个文件夹,也可以根据习惯放在其他位置

常用命令

nginx -s reload #向主进程发送信号,重新加载配置文件,热重启
nginx -s reopen #重启Nginx
nginx -s stop   #快速关闭
nginx -s quit   #等待工作进程结束完成过后关闭
nginx -T    #查看当前Nginx最终的配置
nginx -t    #检查配置是否有问题

Nginx核心配置

# main段配置信息
user  nginx;                        # 运行用户,默认即是nginx,可以不进行设置
worker_processes  auto;             # Nginx 进程数,一般设置为和 CPU 核数一样
error_log  /var/log/nginx/error.log warn;   # Nginx 的错误日志存放目录
pid        /var/run/nginx.pid;      # Nginx 服务启动时的 pid 存放位置

# events段配置信息
events {
    use epoll;     # 使用epoll的I/O模型(如果你不知道Nginx该使用哪种轮询方法,会自动选择一个最适合你操作系统的)
    worker_connections 1024;   # 每个进程允许最大并发数
}

# http段配置信息
# 配置使用最频繁的部分,代理、缓存、日志定义等绝大多数功能和第三方模块的配置都在这里设置
http { 
    # 设置日志模式
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;   # Nginx访问日志存放位置

    sendfile            on;   # 开启高效传输模式
    tcp_nopush          on;   # 减少网络报文段的数量
    tcp_nodelay         on;
    keepalive_timeout   65;   # 保持连接的时间,也叫超时时间,单位秒
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;      # 文件扩展名与类型映射表
    default_type        application/octet-stream;   # 默认文件类型

    include /etc/nginx/conf.d/*.conf;   # 加载子配置项

    # server段配置信息
    server {
        listen       80;       # 配置监听的端口
        server_name  localhost;    # 配置的域名

        # location段配置信息
        location / {
            root   /usr/share/nginx/html;  # 网站根目录
            index  index.html index.htm;   # 默认首页文件
            deny 172.168.22.11;   # 禁止访问的ip地址,可以为all
            allow 172.168.33.44;# 允许访问的ip地址,可以为all
        }

        error_page 500 502 503 504 /50x.html;  # 默认50x对应的访问页面
        error_page 400 404 error.html;   # 同上
    }
}
  • main 全局配置,对全局生效;
  • events 配置影响 Nginx 服务器与用户的网络连接;
  • http 配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置;
  • server 配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块;
  • location 用于配置匹配的 uri
  • upstream 配置后端服务器具体地址,负载均衡配置不可或缺的部分;

server_name 指令

指定虚拟主机域名。

server_name www.taouvw.xyz;

root

指定静态资源目录位置,它可以写在http,server,location等配置中。

root path

例如:
location /image {
    root /opt/nginx/static;
}

当用户访问 www.test.com/image/1.png 时,实际在服务器找的路径是 /opt/nginx/static/image/1.png

www.test.com替换成/opt/nginx/static

root 会将定义路径与 URI 叠加, alias 则只取定义路径。

alias

也是指定静态资源目录的位置,但它只能写在location

location /image {
    alias /opt/nginx/static/image/;
}

当用户访问 www.test.com/image/1.png 时,实际在服务器找的路径是 /opt/nginx/static/image/1.png

使用 alias 末尾一定要添加 / ,并且它只能位于 location 中。

location

配置路径

location [ = | ~ | ~* | ^~ ] uri {
    ...
}

匹配规则:

  • = 精确匹配;
  • ~ 正则匹配,区分大小写;
  • ~* 正则匹配,不区分大小写;
  • ^~ 匹配到即停止搜索;
server {
  listen    80;
  server_name   www.nginx-test.com;

  # 只有当访问 www.nginx-test.com/match_all/ 时才会匹配到/usr/share/nginx/html/match_all/index.html
  location = /match_all/ {
      root  /usr/share/nginx/html
      index index.html
  }

  # 当访问 www.nginx-test.com/1.jpg 等路径时会去 /usr/share/nginx/images/1.jpg 找对应的资源
  location ~ \.(jpeg|jpg|png|svg)$ {
    root /usr/share/nginx/images;
  }

  # 当访问 www.nginx-test.com/bbs/ 时会匹配上 /usr/share/nginx/html/bbs/index.html
  location ^~ /bbs/ {
    root /usr/share/nginx/html;
    index index.html index.htm;
  }
}

return

停止处理请求,直接返回响应码或重定向到其他 URL ;执行 return 指令后, location 中后续指令将不会被执行。

return code [text];
return code URL;
return URL;

例如:
location / {
    return 404; # 直接返回状态码
}

location / {
    return 404 "pages not found"; # 返回状态码 + 一段文本
}

location / {
    return 302 /bbs ; # 返回状态码 + 重定向地址
}

location / {
    return https://www.baidu.com ; # 返回重定向地址
}

变量

变量名 含义
remote_addr 客户端 IP 地址
remote_port 客户端端口
server_addr 服务端 IP 地址
server_port 服务端端口
server_protocol 服务端协议
connection TCP 连接的序号,递增
connection_request TCP 连接当前的请求数量
uri 请求的URL,不包含参数
request_uri 请求的URL,包含参数
scheme 协议名, httphttps
request_method 请求方法
request_length 全部请求的长度,包含请求行、请求头、请求体
args 全部参数字符串
arg_参数名 获取特定参数值
is_args URL中是否有参数,有的话返回 ? ,否则返回空
query_string args 相同
host 请求信息中的 Host ,如果请求中没有 Host 行,则在请求头中找,最后使用 nginx 中设置的 server_name
http_user_agent 用户浏览器
http_referer 从哪些链接过来的请求
http_via 每经过一层代理服务器,都会添加相应的信息
http_cookie 获取用户 cookie
request_time 处理请求已消耗的时间
https 是否开启了 https ,是则返回 on ,否则返回空
request_filename 磁盘文件系统待访问文件的完整路径
document_root URIroot/alias 规则生成的文件夹路径
limit_rate 返回响应时的速度上限值

proxy_pass

用于配置代理服务器

语法:proxy_pass URL;

上下文:location、if、limit_except

示例:
proxy_pass http://127.0.0.1:8081
proxy_pass http://127.0.0.1:8081/proxy

URL 参数原则

  1. URL 必须以 httphttps 开头;
  2. URL 中可以携带变量;
  3. URL 中是否带 URI ,会直接影响发往上游请求的 URL

HTTPS

HTTPS 工作流程
  1. 客户端(浏览器)访问 https://www.baidu.com 百度网站;
  2. 百度服务器返回 HTTPS 使用的 CA 证书;
  3. 浏览器验证 CA 证书是否为合法证书;
  4. 验证通过,证书合法,生成一串随机数并使用公钥(证书中提供的)进行加密;
  5. 发送公钥加密后的随机数给百度服务器;
  6. 百度服务器拿到密文,通过私钥进行解密,获取到随机数(公钥加密,私钥解密,反之也可以);
  7. 百度服务器把要发送给浏览器的内容,使用随机数进行加密后传输给浏览器;
  8. 此时浏览器可以使用随机数进行解密,获取到服务器的真实传输内容;

这就是 HTTPS 的基本运作原理,使用对称加密和非对称机密配合使用,保证传输内容的安全性。

server {
  listen 443 ssl http2 default_server;   # SSL 访问端口号为 443
  server_name lion.club;         # 填写绑定证书的域名(我这里是随便写的)
  ssl_certificate /etc/nginx/https/lion.club_bundle.crt;   # 证书地址
  ssl_certificate_key /etc/nginx/https/lion.club.key;      # 私钥地址
  ssl_session_timeout 10m;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 支持ssl协议版本,默认为后三个,主流版本是[TLSv1.2]

  location / {
    root         /usr/share/nginx/html;
    index        index.html index.htm;
  }
}

liubobo
版权声明:本站原创文章,由 liubobo2022-03-02发表,共计4342字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。