nginx 使用入门

Nginx 使用入门

说明

Nginx 是一个开源、高效可靠的 HTTP 服务器和反向代理;Nginx 有一个主线程和几个工作线程,主线程的目的是加载和验证配置文件、维护工作线程,工作线程用来处理实际的请求,其数量可配置,也可以自动调整为服务器 CPU 数量

1. 环境

1. 关闭 iptables 规则

方便测试要关闭服务器防火墙的规则

sudo iptables -F
sudo iptables -t nat -F
2. 安装
# ubuntu 下安装
sudo apt install nginx

# Mac
brew install nginx
3. 安装目录说明
  1. /etc/logrotate.d/nginx 配置文件,用于 Nginx 日志轮转
  2. /etc/nginx nginx 配置文件目录
    • /etc/nginx/nginx.conf Nginx 主配置文件 Nginx 启动时主要读入这个文件
    • /etc/nginx/conf.d 次级配置文件目录
      • /etc/nginx/conf.d/default.conf 默认配置文件
    • /etc/nginx/mime.types 用于设置 http 协议 Content-Type 与扩展名对应关系的配置文件
  3. /var/log/nginx Nginx 的日志目录

2. 基本命令

1. 启动服务
# 启动服务
sudo nginx
2. 关闭服务
# 快速关闭
sudo nginx -s stop

# 优雅关闭,会等到工作进程处理完当前请求、然后将其关闭
sudo nginx -s quit
3. 重新加载配置文件
sudo nginx -s reload
4. 检查配置文件是否正确
sudo nginx -t

3. Nginx 配置文件

Nginx 配置文件用来配置 Nginx 的工作方式,主配置文件: /etc/nginx/nginx.conf 下(Linux)除此之外 nginx.conf 还会加载其他的配置文件,他们被保存在 /etc/nginx/conf.d/*.conf

Nginx 由不同的模块组成,这些模块由配置文件中指定的指令控制

  1. 简单指令:包含指令名称和指令参数,以空格分隔,; 结尾
  2. 块指令: 指令参数用 {} 包围,块指令 {}中可以包含其他指令,这个时候块指令就是被包围指令的上下文
    server { # 块指令
        listen 80; # 简单指令
        server_name localhost; # server 就是 server_name 的上下文 Context
    }
1. 主要配置说明

Nginx 配置的核心是定义要处理的 URL 以及如何响应这些 URL 请求,即定义一系列的虚拟服务器 server 控制对特定域名或者 IP 的请求的处理

每一个虚拟服务器 server 又可以定义一系列的 location 控制处理特定的 URI 集合

# nginx.conf
user www-data; # 设置 nginx 服务的系统使用用户
worker_processes auto; # 工作进程数
error_log /var/log/nginx/error.log; nginx 的错误日志
pid /run/nginx.pid; nginx 服务启动时的 pid

events {
    worker_connections 768; 每个进程允许的最大连接数,一般 nginx 优化时会调节
}

http {
    keepalive_timeout 65; # 设置请求超时时间

    # 定义一个 日志格式 main
    log_format main '$remote_addr - $remote_user [$time_local]  '
        : '"$request" $status $bytes_sent '
        : '"$http_referer" "$http_user_agent" "$http_x_forwarded_for"';

    access_log /var/log/nginx/access.log main; # Nginx 请求的访问状态日志,使用 main 的格式记录
    error_log /var/log/nginx/error.log; # Nginx 处理 http 请求错误的以及 Nginx 服务错误的日志


    # 服务配置,可以创建多个 server 服务,一般创建在次一级配置中 通过 include 引用
    # 一个 server 配置一个虚拟、独立的站点
    server {
        listen 80; # 监听的端口
        server_name localhost; # 主机名、域名、或者是 IP

        # location 是 server_name 下每一层路径的访问设置
        location / {
            root /var/www/html; # 存放响应文件的路径
            index index.html index.htm; # 默认的响应文件名
        }
    }

    # Nginx 会读取 nginx.conf 文件,执行到这一句时会将 /etc/nginx/conf.d/ 目录下的所有 .conf 类型文件读取,并加载其中配置
    include /etc/nginx/conf.d/*.conf;
}
2. location 的路径匹配
1. location 用来解析网络请求 uri 到服务器本地文件的映射关系, 其中 root 用来指定文件路径
# 如下 location 块指定 / 前缀与请求中的 URI 对比,URI 将被添加到 root 指令中指定的路径,以此形成本地文件系统的路径
location uri {
    root localPath
}

location /test {
    root /www/html
}

# 例子: 请求 http://localhost/test/default.html 会被解析为系统路径 /www/html/test/default.html

# root 命令也可以直接写到 server 块中,这个时候,如果 location 中没有 root 监视使用 所属上下文的 server 中的 root 命令

server {
    listen 8080;
    root /www;

    location / {
        # 使用上下文的 root /www
    }
}
2. 可以看到 root 命令映射的本地路径会包含 location 匹配的路径,与 root 类似的命令 alias 可以忽略 location 后匹配的路径
# 同样一个请求 http://localhost/test/index.html
location /test {
    root /www/html; # 会映射到 /www/html/test/index.html
    index index.html;
}

location /test {
    alias /www/html; # 会映射到 /www/html/index.html;
    index index.html;
}
3. 一个 server 块中可以包含多个 location 块,Nginx 采用最长前缀匹配原则,因此如果有较长的 uri 则优先匹配
# 如下 访问 http://localhost/test/index.html 会优先匹配 location /test 解析后会到本地文件夹 /www/test/index.html 寻找文件
server {
    listen 8082;
    server_name localhost;

    location / {
        root /www/html;
        index index.html;
    }

    location /test {
        root /www; # 匹配的路径/test 的请求回到 /www/test 下寻找文件
        index index.html;
    }
}
4. 除了最长前缀匹配原则,location 还有一些其他的匹配规则

匹配规则优先级

  1. location = / {} 优先级最高,一旦匹配成功不在查找其他匹配项
  2. location ^~ /test {} 前缀匹配,一旦匹配成功不查找其他项
  3. location ~ \/images\ {} 区分大小写的正则表达式匹配
  4. location ~* \/images\ {} 不区分大小写的正则表达式匹配
  5. location / {} 通用匹配,如果没有其他的匹配,则会匹配到这里
3. Nginx 日志

包括 error_log 和 access_log

  • error_log 记录 Nginx 处理 http 请求错误的状态以及 Nginx 服务错误的状态
  • access_log 记录每一次 Nginx 请求的访问状态

通过 log_format 可以定义日志记录的格式

log_format main '$remote_addr - $remote_user [$time_local]  '
    : '"$request" $status $bytes_sent '
    : '"$http_referer" "$http_user_agent" "$http_x_forwarded_for"';

其中 “$” 开头的就是 Nginx 变量,基本上分为如下几类

  1. HTTP 请求变量

    • http[HEADER]使 h t t p ∗ [ H E A D E R ] 使 用 http + ‘*’ + 请求头的参数 表示取得 ‘请求’ 的对应请求头信息
    • $sent*http*[HEADER] 表示取得响应的响应头信息
    • 注意:要小写并且使用下划线
  2. 其他的变量 可以在这里查找

4. 代理服务器

Nginx 的一个常见的功能是将其设置为代理服务器,即接受客户端的请求并将其转发给代理服务器,再接受代理服务器的响应,将他们发送到客户端

 server {
     listen 8082;
     server_name localhost;

     location / {
         root /www/html;
         index index.html;
     }
 }

 server {
     listen 8083;
     server_name localhost;

     location / {
         proxy_pass http://localhost:8082; # 请求代理到另外一个地址
     }

     location ^~ /test { # 请求以 /test 开始则直接返回内容
         root /www;
         index index.html;
     }
 }

5. 负载均衡

 upstream backend {
     server localhost:8082;
     server localhost:8082;

     keepalive 30;
 }
 server {
     listen 8082;
     server_name localhost;

     location / {
         root /www/html;
         index index.html;
     }
 }

 server {
     listen 8083;
     server_name localhost;

     location / {
         proxy_pass http://backend; # 负载均衡
     }

     location ^~ /test {
         root /www;
         index index.html;
     }
 }

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值