nginx配置文档详解

Nginx是什么?

  1. Nginx (engine x)是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx1.0.4发布。
  2. Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
  3. Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高达50,000 个并发连接数。
  4. Nginx支持热部署,启动简单,可以做到7*24不间断运行。几个月都不需要重新启动。

nginx 特点

开发 Nginx 的主要原因是为了满足高性能、高并发的需求,同时提供灵活的配置和扩展能力。以下是开发 Nginx 的几个关键原因:

1. 高性能和高并发

Nginx 采用了事件驱动的异步非阻塞架构,这使得它在处理高并发连接时表现出色。相比传统的进程或线程模型,Nginx 能够更高效地利用系统资源,处理大量的并发请求。

2. 反向代理和负载均衡

Nginx 可以作为反向代理服务器,将客户端请求转发到后端服务器,并支持多种负载均衡策略(如轮询、权重、IP 哈希等),从而提高系统的可扩展性和可靠性。

3. 静态资源处理

Nginx 在处理静态资源(如 HTML、CSS、JavaScript、图片等)时非常高效,能够快速响应客户端请求,减少服务器负载。

4. 灵活的配置

Nginx 提供了灵活的配置文件语法,允许用户根据需求进行各种定制化配置,如 URL 重写、访问控制、缓存配置等。

5. 模块化设计

Nginx 采用模块化设计,支持通过动态加载模块来扩展功能。这使得开发者可以根据具体需求添加或移除功能模块,保持系统的灵活性和可维护性。

6. 安全性

Nginx 提供了多种安全特性,如 SSL/TLS 支持、访问控制、请求过滤等,帮助用户构建安全的 Web 应用。

7. 社区和生态系统

Nginx 拥有庞大的用户社区和丰富的生态系统,提供了大量的第三方模块和插件,进一步增强了其功能和可扩展性。

8. 简单易用

Nginx 的配置文件语法简单明了,易于学习和使用,降低了运维和开发人员的学习成本。

综上所述,Nginx 的高性能、高并发处理能力、灵活的配置和扩展性,使其成为现代 Web 服务器和反向代理服务器的首选之一。

nginx配置文件组成部分

Nginx 配置文件主要分成四部分:main(全局设置)、http(HTTP 的通用设置)、server(虚拟主机设置)、location(匹配 URL 路径)。还有一些其他的配置段,如 event,upstream 等。

# 全局配置
user nginx;
worker_processes auto;

# 事件配置
events {
    worker_connections 1024;
}

# HTTP 配置
http {
	server {
	    listen 8081;
	    listen [::]:8081;
	    server_name x.x.x.x;  # 替换为您的域名或 IP 地址
	
	    access_log /etc/nginx/logs/test/access.log;
	    error_log /etc/nginx/logs/test/error.log;
	
	    location / {
	        root /var/www/html/test/dist;
	        index index.html;
	        try_files $uri $uri/ /index.html;
	    }
	
	    add_header 'Access-Control-Allow-Origin' '*';
	
	    location ^~/api {
	        proxy_http_version 1.1;
	        proxy_next_upstream http_500 http_502 http_504 error timeout invalid_header;
	        client_max_body_size 20m;
	
	        add_header 'Access-Control-Allow-Origin' '*';
	        set $cors_origin "";
	        proxy_pass http://127.0.0.1:8210;
	        proxy_set_header Host $http_host;
	        proxy_set_header X-Real-IP $remote_addr;
	        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	    }
	}
}

nginx配置文件详解

以下是对 Nginx 配置文件中每一行代码的解释:

全局配置

  • user nginx;:指定 Nginx 进程的运行用户和用户组。
  • worker_processes auto;:指定工作进程的数量,auto 表示自动检测 CPU 核心数。

事件配置

  • events { ... }:配置与网络连接处理相关的参数。
    • worker_connections 1024;:每个工作进程的最大连接数。

HTTP 配置

  • http { ... }:配置 HTTP 服务器相关的参数。
    • include mime.types;:包含文件类型映射表。
    • default_type application/octet-stream;:默认的 MIME 类型。

server配置

listen 8081;
  • listen 8081:配置服务器监听 IPv4 的 8081 端口。
listen [::]:8081;
  • listen [::]:8081:配置服务器监听 IPv6 的 8081 端口。
server_name x.x.x.x;  # 替换为您的域名或 IP 地址
  • server_name x.x.x.x:设置服务器名称为 x.x.x.x。可以替换为您的域名或 IP 地址,用于匹配客户端请求中的 Host 头信息。
access_log /etc/nginx/logs/test/access.log;
  • access_log /etc/nginx/logs/test/access.log:指定访问日志文件的路径。所有的访问请求日志将记录在 /etc/nginx/logs/test/access.log 文件中。
error_log /etc/nginx/logs/test/error.log;
  • error_log /etc/nginx/logs/test/error.log:指定错误日志文件的路径。所有的错误日志将记录在 /etc/nginx/logs/test/error.log 文件中。

location(匹配 URL 路径)配置

location / 
  • location /:定义一个位置块,匹配所有以 [/]开头的请求路径。
    root /var/www/html/test/dist;
  • root /var/www/html/test/dist:设置根目录为 /var/www/html/test/dist。所有匹配到的请求路径将从这个目录开始查找文件。
    index index.html;
  • index index.html:指定默认的索引文件为 index.html。当请求路径是一个目录时,Nginx 将返回该目录下的 index.html 文件。
    try_files $uri $uri/ /index.html;
  • try_files $uri $uri/ /index.html:尝试按顺序访问 $uri(请求的 URI 对应的文件)、$uri/(请求的 URI 对应的目录),如果都不存在,则返回 /index.html 文件。这通常用于单页应用(SPA),确保所有路由都能正确返回 index.html 文件。
add_header 'Access-Control-Allow-Origin' '*';
  • add_header 'Access-Control-Allow-Origin' '*':添加 CORS 头,允许所有来源访问资源。这对于跨域请求非常重要。

总结

这个配置文件的作用是配置 Nginx 服务器监听 8081 端口,记录访问和错误日志,处理根路径的请求,并添加跨域访问控制头。
以下是对 Nginx 配置块 location ^~/api 中每一行代码的解释:

location ^~/api {
  • location ^~/api:定义一个位置块,匹配以 /api 开头的请求。^~ 表示前缀匹配,并且如果匹配成功,将不再进行正则表达式匹配。
    proxy_http_version 1.1;
  • proxy_http_version 1.1:设置代理请求使用 HTTP/1.1 协议。HTTP/1.1 支持持久连接和分块传输编码。
    proxy_next_upstream http_500 http_502 http_504 error timeout invalid_header;
  • proxy_next_upstream:定义在什么情况下将请求传递给下一个上游服务器。这里指定了当收到 HTTP 500、502、504 错误,或发生错误、超时、无效头时,将请求传递给下一个上游服务器。
    client_max_body_size 20m;
  • client_max_body_size 20m:设置客户端请求主体的最大大小为 20MB。如果请求主体超过此大小,Nginx 将返回 413 (Request Entity Too Large) 错误。
    add_header 'Access-Control-Allow-Origin' '*';
  • add_header 'Access-Control-Allow-Origin' '*':添加 CORS 头,允许所有来源访问资源。这对于跨域请求非常重要。
    set $cors_origin "";
  • set $cors_origin "":定义一个变量 $cors_origin 并将其初始化为空字符串。这个变量可以在后续配置中使用。
    proxy_pass http://127.0.0.1:8210;
  • proxy_pass http://127.0.0.1:8210:将匹配到的请求代理到 http://127.0.0.1:8210。这意味着 /api 路径下的请求将被转发到本地的 8210 端口。
    proxy_set_header Host $http_host;
  • proxy_set_header Host $http_host:将原始请求的 Host 头信息传递给上游服务器。$http_host 是客户端请求中的 Host 头信息。
    proxy_set_header X-Real-IP $remote_addr;
  • proxy_set_header X-Real-IP $remote_addr:将客户端的真实 IP 地址传递给上游服务器。$remote_addr 是客户端的 IP 地址。
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for:将客户端的 IP 地址链传递给上游服务器。$proxy_add_x_forwarded_for 包含客户端的 IP 地址以及所有经过的代理服务器的 IP 地址。

总结

这个配置块的作用是将 /api 路径下的请求代理到本地的 8210 端口,同时设置了一些代理请求的头信息和处理错误的策略,并允许跨域请求。

nginx 负载均衡反向代理

要使用 Nginx 进行负载均衡反向代理,可以按照以下步骤配置 Nginx:

步骤

  1. 定义上游服务器:在 Nginx 配置文件中定义一组上游服务器。
  2. 配置反向代理:在 server 块中配置反向代理,将请求转发到上游服务器。

示例配置

以下是一个示例 Nginx 配置文件,展示了如何进行负载均衡反向代理:

http {
    upstream backend {
        # 定义上游服务器
        server 192.168.1.101:8080;
        server 192.168.1.102:8080;
        server 192.168.1.103:8080;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

解释

  1. upstream backend:定义一个名为 backend 的上游服务器组。

    • server 192.168.1.101:8080;:定义第一个上游服务器。
    • server 192.168.1.102:8080;:定义第二个上游服务器。
    • server 192.168.1.103:8080;:定义第三个上游服务器。
  2. server:配置一个虚拟服务器。

    • listen 80;:监听 80 端口。
    • server_name example.com;:设置服务器名称为 example.com
  3. location /:配置根路径的请求处理。

    • proxy_pass http://backend;:将请求转发到上游服务器组 backend
    • proxy_set_header Host $host;:将原始请求的 Host 头信息传递给上游服务器。
    • proxy_set_header X-Real-IP $remote_addr;:将客户端的真实 IP 地址传递给上游服务器。
    • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;:将客户端的 IP 地址链传递给上游服务器。
    • proxy_set_header X-Forwarded-Proto $scheme;:将原始请求的协议(HTTP 或 HTTPS)传递给上游服务器。

负载均衡策略

Nginx 支持多种负载均衡策略,默认是轮询(Round Robin)。你可以通过在 upstream 块中添加参数来改变负载均衡策略,例如:

  • 轮询(默认):按顺序将请求分配给每个上游服务器。
  • 权重(weight):根据权重分配请求。
  • IP 哈希(ip_hash):根据客户端 IP 地址分配请求。
  • 最少连接(least_conn):将请求分配给当前连接数最少的服务器。
示例:使用权重策略
upstream backend {
    server 192.168.1.101:8080 weight=3;
    server 192.168.1.102:8080 weight=1;
    server 192.168.1.103:8080 weight=2;
}
示例:使用 IP 哈希策略
upstream backend {
    ip_hash;
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
    server 192.168.1.103:8080;
}

通过这些配置,你可以灵活地使用 Nginx 进行负载均衡反向代理。

相关资料参考

Nginx中文参考文档
Nginx开发从入门到精通

  • 28
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值