Nginx是什么?
- Nginx (engine x)是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx1.0.4发布。
- Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
- Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高达50,000 个并发连接数。
- 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:
步骤
- 定义上游服务器:在 Nginx 配置文件中定义一组上游服务器。
- 配置反向代理:在
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;
}
}
}
解释
-
upstream backend
:定义一个名为backend
的上游服务器组。server 192.168.1.101:8080;
:定义第一个上游服务器。server 192.168.1.102:8080;
:定义第二个上游服务器。server 192.168.1.103:8080;
:定义第三个上游服务器。
-
server
块:配置一个虚拟服务器。listen 80;
:监听 80 端口。server_name example.com;
:设置服务器名称为example.com
。
-
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 进行负载均衡反向代理。