Nginx 快速入门

407 阅读5分钟

这是我参与8月更文挑战的第3天,活动详情查看:8月更文挑战

os: windows10

nginx: 1.19.2

官方下载地址:nginx.org/en/download…

在 windows 下部署

  1. 在官方网页上下载 zip 格式的文件
  2. 解压到指定位置,如 D:\Program Files\nginx-1.19.2
  3. 打开 cmd,然后 cd 到上一步解压的文件路径下
  4. 输入 nginx 的启动命令 start nginx

小技巧:如上第 2,3 步,我们可以优化为,zip 包直接解压到 D:\Program Files\nginx-1.19.2,在这里路径下打开文件管理器,在文件管理器的地址栏,输入 cmd 命令,打开的 cmd 窗口就会自动定位到当前文件夹所在的路径

或者,当第 2 步完成后,我们直接双击 nginx.exe 运行,这个时候我们可以通过检查任务管理器中是否有运行 nginx 来判断是否成功启动

常用文件位置示意图

|- nginx-1.19.2
    |- conf
        |- nginx.conf  nginx的配置项都在这里
    |- logs
        |- access.log  nginx的访问日志默认存放位置
        |- error.log   nginx的错误日志默认存放位置

常规操作流程

  1. 在 cmd 中用 start nginx 启动服务
  2. 用文本编辑工具,如 hbx, sublimetext 打开文件 conf/nginx.conf
  3. 修改配置文件中的配置等
  4. 在 cmd 中使用 nginx -s reload 刷新配置文件
  5. 检查 logs/error.log,确认服务重启后未报错(如果报错就重复 3,4 步)
  6. 网页浏览验证配置项是否符合预期,可以查看 logs/access.log 中的访问记录,如果需要,则继续重复 3,4,5 步

nginx 优点

反向代理

代理分为两种

正向代理:
  • 通过第三方代理去请求目标服务器的资源
  • 需要自己配置,第三方只负责去请求用户指定的url,获取资源并返回
反向代理:
  • 用户直接访问代理服务器,服务器根据用户的请求,去选择访问合适的真实服务器,并返回数据
  • 核心是,暴露代理服务器,隐藏真实服务器地址

示例代码:

server {
    listen 80;
  # 在 server.server_name 中指定用户访问的 url
    server_name 192.168.0.1;
    location / {
        root html;
    # 在server.location.proxy_pass 中指定nginx需要转发访问的实际url
        proxy_pass http://127.0.0.1:8080;
        index index.html index.htm;
server {
    # 配置外部访问路径 http://192.168.0.1:9001
    listen 9001;
    server_name 192.168.0.1;
    # 根据实际的访问路径,和正则表达式匹配,转发到对应的路径上
    location ~ /edu/ {
        proxy_pass http://127.0.0.1:8080;
    }
    location ~ /vod/ {
        proxy_pass http://127.0.0.1:8081;
    }

负载均衡

将请求分发到多个服务器,降低单个服务器的负载量

策略:

  • 轮询(默认)

  • 权重

  • ip哈希

    • 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session共享问题
  • fair (第三方)

    • 按后端服务器的响应时间来分配请求,响应时间短的,优先分配

示例代码:

# 在HTTP的全局块中添加
upstream myserver {
    # 默认方式
    server 192.168.0.1:8080;
    server 192.168.0.1:8081;
}
# 修改server 块中的server_name,location 中添加 proxy_pass
server {
    listen 80;
    server_name 192.168.0.1:8080;
  location / {
        proxy_pass http://myserver;
        root html;
        index index.html index.htm;
    }
}
upstream myserver {
    # 权重方式
    server 192.168.0.1:8080 weight 10;
    server 192.168.0.1:8081 weight 5;
}
upstream myserver {
    # fair 方式
    server 192.168.0.1:8080;
    server 192.168.0.1:8081;
    fair;
}
upstream myserver {
    # IP 哈希
    ip_hash;
    server 192.168.0.1:8080;
    server 192.168.0.1:8081;
}

动静分离

将动态资源和静态组资源交给不同的服务器去解析,提高解析速度

静态资源:

指静态的html,css,js,img等资源

动态资源:

指动态的,需要经过后台计算处理的,或者是从数据库拉取的资源,常见的,如ajax请求的数据

示例代码:

server {
    listen 8080;
    server_name 192.168.0.1;
  location /html/ {
        root /data/;
        index index.html
    }
    location /images/ {
        root /data/;
        # 以列表的形式,列出当前路径下的全部文件
        autoindex on;
    }   
}
# 文件实际路径
|- data
  |- html
    |- a.html
  |- images
    |- 1.jpg
# 访问的URL
# http://192.168.0.1:8080/html/a.html
# http://192.168.0.1:8080/images/1.jpg

高可用

在使用 Nginx 做反向代理或者负载均衡的时候,都是以 Nginx 为入口,如果 Nginx 宕机了,那么所有的服务都无法正常提供,影响非常严重。所有我们需要保证 nginx 高可用,就是配置备份机,前一个挂了,还有后一个。

为了避免负载均衡服务器宕机造成严重影响,就需要建立一个备份机。主服务器和备份机上都运行高可用(High Availability)监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并继续提供负载均衡服务;当备份管理器又从主管理器收到“I am alive”这样的信息时,它就释放服务IP地址,这样的主服务器就开始再次提供负载均衡服务。

有需要的,可以用关键字 nginx keepalived高可用性负载均衡 去搜索具体的搭建教程

常用命令

# 查看版本
./nginx -v
# 查看安装情况
./nginx -t
# 启动1,不建议,会卡住命令行执行
./nginx
# 启动2,建议使用
start nginx
# 关闭
./nginx -s stop
# 重新加载,用于手动调整配置文件之后重新加载
./nginx -s reload

配置文件

全局块

从配置文件开始,到event 块之间的内容,主要设置一些影响nginx 整体运行的配置指令

worker_process 1  值越大,可以支持的并发处理就越多

event块

配置nginx与用户的网络连接

worker_connections 1024   支持的最大连接数

HTTP 块

HTTP 全局块
server 块
location 指令
location [ = | ~ | ~* | ^~ ] uri {
​
}

= :用于不含正则表达式的uri 前,要求请求字符串和 uri 严格匹配,如果匹配成功,就停止继续向下搜索,并立即处理该请求

~ :用于表示uri 包含正则表达式,区分大小写

~* :用于表示 uri 包含正则表达式,不区分大小写

^~ :用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的location 后,立即使用此 location 处理请求,而不再使用location块中的正则 和请求字符串做匹配

注:如果在 uri 中包含正则表达式,则必须要有 ~ 或者 ~* 标识