返回

用好基础模块,就能玩转Nginx

前端

Nginx的基础模块配置

Nginx的基础模块包括了HTTP模块、mail模块、stream模块等。HTTP模块是Nginx的核心模块,负责处理HTTP请求。mail模块用于处理邮件服务。stream模块用于处理TCP/UDP流数据。

HTTP模块的配置

HTTP模块的配置主要包括了以下几个方面:

  • 监听端口:指定Nginx监听的端口号。
  • 服务器名:指定Nginx的服务器名。
  • 根目录:指定Nginx的根目录。
  • 索引文件:指定Nginx的索引文件。
  • MIME类型:指定Nginx的MIME类型。
  • 错误页面:指定Nginx的错误页面。

mail模块的配置

mail模块的配置主要包括了以下几个方面:

  • 邮件服务器地址:指定邮件服务器的地址。
  • 邮件服务器端口:指定邮件服务器的端口号。
  • 用户名:指定用于登录邮件服务器的用户名。
  • 密码:指定用于登录邮件服务器的密码。
  • 邮件发送地址:指定邮件发送地址。

stream模块的配置

stream模块的配置主要包括了以下几个方面:

  • 监听端口:指定Nginx监听的端口号。
  • 服务器类型:指定Nginx的服务器类型。
  • 代理服务器地址:指定Nginx的代理服务器地址。
  • 代理服务器端口:指定Nginx的代理服务器端口号。

Nginx的基础模块使用举例

使用Nginx作为静态资源服务器

server {
    listen 80;
    server_name example.com;
    root /var/www/html;
    index index.html;
}

上述配置将Nginx配置为一个静态资源服务器,监听80端口,服务器名为example.com,根目录为/var/www/html,索引文件为index.html。

使用Nginx作为反向代理服务器

server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://localhost:8080;
    }
}

上述配置将Nginx配置为一个反向代理服务器,监听80端口,服务器名为example.com,将所有请求转发给后端的应用程序服务器,应用程序服务器的地址为localhost,端口号为8080。

使用Nginx作为微服务网关

server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://localhost:8080;
        limit_req zone=one burst=5 nodelay;
        if ($http_x_forwarded_for) {
            set $realip $http_x_forwarded_for;
        } else {
            set $realip $remote_addr;
        }
        lua_shared_dict shared_dict 1m;
        lua_code_cache shared_dict;
        access_by_lua_block {
            local cjson = require("cjson")
            local ok, err = ngx.shared.dict.get(shared_dict, $realip)
            if not ok then
                ngx.shared.dict.add(shared_dict, $realip, cjson.encode({count=0, timestamp=ngx.time()}))
            end
            local data = cjson.decode(ok)
            if ngx.time() - data["timestamp"] > 60 then
                data["count"] = 0
                data["timestamp"] = ngx.time()
                ngx.shared.dict.set(shared_dict, $realip, cjson.encode(data))
            end
            data["count"] = data["count"] + 1
            if data["count"] > 10 then
                ngx.exit(ngx.HTTP_SERVICE_UNAVAILABLE)
            end
        }
    }
}

上述配置将Nginx配置为一个微服务网关,监听80端口,服务器名为example.com,将所有请求转发给后端的应用程序服务器,应用程序服务器的地址为localhost,端口号为8080。同时,该配置还使用了Lua语言来实现限流和熔断功能。当客户端的请求数超过10次/分钟时,Nginx将返回503错误。