Nginx 是一款开源的高性能 HTTP 和反向代理服务器,同时也提供了 IMAP/POP3/SMTP 代理功能。它由俄罗斯程序员 Igor Sysoev 于2004年首次发布,最初设计目的是为了解决 C10k 问题,即如何让单台服务器同时处理1万个并发连接的问题。
Nginx 主要的功能和作用包括但不限于以下几点:
Nginx 的成功在于其采用了事件驱动的异步非阻塞处理模型,这使得它在处理高并发请求时表现出色。此外,Nginx 的模块化设计允许用户根据需要灵活扩展其功能。它的配置文件结构清晰,易于理解和修改,支持丰富的配置选项,便于定制化部署。正因为这些特性,Nginx 已经成为构建高性能 Web 应用程序、负载均衡集群和反向代理的理想选择。
nginx-x.x.xx.zip
的链接(这里的 x.x.xx
是版本号),点击下载这个压缩包。解压文件:将下载的 .zip
文件解压到你希望安装 Nginx 的目录,例如 C:\nginx\
。
启动 Nginx:
打开命令提示符(以管理员身份运行),然后导航到 Nginx 的安装目录下的 sbin
文件夹。例如,如果你把 Nginx 解压到了 C:\nginx\
,那么你应该执行:
cd C:\nginx\nginx-1.26.3\ (根据实际解压后的文件夹名称调整路径)
然后,输入以下命令来启动 Nginx:
start nginx
或者直接双击 nginx.exe
来启动它。
验证安装:
http://localhost/
。如果看到欢迎页面,说明 Nginx 已经成功安装并正在运行。如果你想在任何地方都能使用 nginx
命令,可以配置环境变量:
添加到系统环境变量:
Path
变量,然后点击“编辑”。sbin
目录路径,例如 C:\nginx\nginx-1.26.3\
(确保指向正确的路径)。验证配置是否成功:
nginx -v
来检查是否能够识别 Nginx 命令以及查看其版本信息。PID,全称为Process Identifier(进程标识符),是操作系统为了管理和识别运行中的每个进程而分配的一个唯一数字标识符。在任何给定时间点,操作系统中运行的所有进程都有一个唯一的PID值,这使得操作系统能够对这些进程进行管理、监控和控制。
不同的操作系统提供了不同的工具来查看正在运行的进程及其PID:
Linux/macOS: 使用ps
命令可以列出所有进程及其PID。例如,要查找Nginx的主进程ID,可以使用以下命令:
ps aux | grep nginx
或者直接查看Nginx配置文件中指定的PID文件内容(如果有的话):
cat /var/run/nginx.pid
Windows: 在任务管理器中可以直接看到每个进程的PID。也可以使用命令行工具tasklist
来显示包括PID在内的进程信息:
tasklist /FI "imagename eq nginx.exe"
在Unix/Linux系统中,经常需要向特定进程发送信号以触发某些行为(如重新加载配置、优雅地关闭服务等)。这通常通过PID来实现。例如,向Nginx发送重新加载配置的信号:
sudo kill -HUP `cat /var/run/nginx.pid`
下面是针对在windows系统中的操作
即使你已经配置了环境变量,当你直接在命令行输入 nginx 命令而没有指定工作目录和配置文件路径时,Nginx 默认会在其认为的当前工作目录下寻找这些文件,这可能是导致错误的原因
启动 Nginx
打开命令提示符(推荐以管理员身份运行),导航到 Nginx 的安装目录下,然后执行:
start nginx
或者直接双击 nginx.exe
文件。
停止 Nginx
要停止 Nginx,可以在命令提示符中输入:
nginx -s stop
重新加载配置(不停机重载)
当你对配置文件进行了更改并希望应用新设置时,可以使用以下命令:
nginx -s reload
检查配置文件语法
在重新加载前,确保配置文件正确无误,可以通过以下命令检查:
nginx -t
在Windows上,你可以使用以下几种方法来查看Nginx的进程信息:
任务管理器:
nginx.exe
。这里可以看到Nginx的主进程和工作进程。命令行工具:
使用tasklist
命令结合findstr
来过滤Nginx相关的进程:
tasklist /FI "imagename eq nginx.exe"
这个命令会列出所有名为nginx.exe
的进程及其PID信息。
在Windows版本的Nginx中,默认情况下也会将主进程的PID写入一个文件中。这个文件的位置取决于你的配置文件设置,但通常可以在Nginx安装目录下的logs
文件夹中的nginx.pid
找到。例如,如果Nginx安装在C:\nginx\
目录下,则可以使用以下命令查看主进程PID:
type C:\nginx\logs\nginx.pid
nginx -s
发送信号在Windows上,你可以通过nginx -s
命令向Nginx发送信号以执行不同的操作,如重新加载配置或停止服务。这包括:
reload: 重新加载配置文件,不中断服务。
nginx -s reload
stop: 快速关闭Nginx。
nginx -s stop
quit: 优雅地关闭Nginx,在处理完当前请求后退出。
nginx -s quit
这些命令需要在命令提示符窗口中执行,并且应该从Nginx的安装目录运行,或者确保你的系统路径包含Nginx的可执行文件路径。在某些情况下,可能需要以管理员身份运行命令提示符来执行这些命令。
nginx
命令。否则,请确保你在 Nginx 的安装目录或其 sbin
子目录下执行命令。sudo
)。nginx.conf
)定义了服务器的行为,包括监听的端口、虚拟主机、反向代理设置、负载均衡策略等。Nginx配置文件是控制Nginx服务器行为的核心。一个典型的Nginx配置文件(通常命名为nginx.conf
)由多个部分组成,每个部分都有其特定的功能和用途。
nginx -V
你可以通过上面指令来查看文件路径,--conf-path=“相对路径”
明确指出了配置文件的所在位置
位于配置文件最外层,定义了影响整个Nginx进程的参数。
配置与事件驱动模型相关的设置。
这是Nginx配置中最复杂的部分,包含了处理HTTP请求的所有相关配置。
定义虚拟主机配置,允许你基于不同的域名或IP地址提供不同的服务。
用于匹配不同的URI请求,并对这些请求执行特定的操作。
=
, 正则匹配~
, 忽略大小写的正则匹配~*
, 前缀匹配^~
等)来处理请求。用于定义一组后端服务器,实现负载均衡。
通过合理配置上述各部分,可以根据具体需求定制Nginx的行为,以满足高性能Web服务的要求。例如,你可以设置静态资源缓存策略、启用SSL/TLS安全连接、配置反向代理以支持动态内容处理等。每种配置都需要仔细考虑其对性能、安全性和维护性的影响。
首先,你需要确保你的静态网站已经构建完成,并且所有的资源文件(HTML, CSS, JavaScript, 图片等)都已准备好。如果你使用的是前端框架或工具(如React, Vue, Hugo等),你可能需要先运行构建命令生成最终的静态资源文件。
接下来,你需要配置Nginx以正确地服务这些静态文件。这通常涉及到编辑Nginx的配置文件(通常是nginx.conf
或者位于sites-available
目录下的某个配置文件)。
server {
listen 80;
server_name example.com;
location / {
root /path/to/your/static/site; # 设置静态文件的根目录
index index.html; # 默认首页
try_files $uri $uri/ /index.html; # 对于单页应用(SPA)特别有用
}
error_page 404 /404.html;
location = /404.html {
root /path/to/your/static/site;
}
}
在这个配置中,你需要替换example.com
为你的域名,并设置正确的root
路径指向你静态站点所在的目录。
在保存了新的配置后,你应该测试Nginx配置是否有语法错误,并重新加载Nginx使更改生效。可以使用以下命令:
sudo nginx -t # 测试配置文件的正确性
sudo nginx -s reload # 重新加载Nginx配置
如果静态资源不在服务器上,你需要将它们上传到服务器上的指定目录(即你在Nginx配置中定义的root
路径)。你可以使用SCP、FTP或其他文件传输方式来完成这项工作。
一旦完成上述步骤,理论上你应该可以通过浏览器访问你的静态网站了。只需在地址栏输入你的域名或服务器IP地址即可。
在Nginx中配置工作进程的数量是非常重要的,因为它直接影响到服务器的性能和资源利用效率。工作进程负责处理客户端请求,因此合理设置worker_processes
的数量可以提高服务器响应速度和吞吐量。
Nginx的工作进程数量是在主配置文件(通常是nginx.conf
)的全局块中通过worker_processes
指令来定义的。以下是几种常见的配置方式:
根据CPU核心数自动调整:
这是最常用的方式之一,它允许Nginx根据服务器的CPU核心数自动决定最佳的工作进程数。
worker_processes auto;
使用auto
关键字可以让Nginx自动检测并设置为最佳值,这通常等于服务器的CPU核心数。
手动指定具体数值:
如果你对服务器负载情况非常了解,并且想要手动控制工作进程的数量,可以直接指定一个具体的数字。
worker_processes 4; # 假设你的服务器有4个CPU核心
基于其他因素调整:
在某些情况下,可能需要考虑除了CPU核心数之外的因素,比如I/O等待时间、网络延迟等。虽然直接与这些因素相关的配置并不多,但你可以通过试验不同的worker_processes
设置找到最适合你应用环境的配置。
结合worker_connections
使用:确定了worker_processes
后,还需要注意events
块中的worker_connections
指令,它定义了一个工作进程同时处理的最大连接数。最大并发连接数等于worker_processes
乘以worker_connections
。
events {
worker_connections 1024;
}
监控与调优:部署完成后,应该持续监控服务器性能指标(如CPU利用率、内存使用率、请求响应时间等),并根据实际情况进一步微调worker_processes
和其他相关参数。
测试配置:每次修改Nginx配置文件后,请记得先进行配置测试,确保没有语法错误:
sudo nginx -t
然后重新加载Nginx使新的配置生效:
sudo nginx -s reload
反向代理是一种常见的网络服务部署模式,特别是在处理Web请求时非常有用。它允许客户端发送请求到一个代理服务器,然后由这个代理服务器将请求转发给后端的实际服务器(可以是一个或多个),并将响应返回给客户端。
安装Nginx:确保你的系统上已经安装了Nginx。如果没有,请根据你的操作系统选择合适的安装方法。
编辑Nginx配置文件:你需要编辑Nginx的主要配置文件(通常是nginx.conf
或者位于sites-available
目录下的某个配置文件)以添加反向代理设置。
配置反向代理:使用location
块结合proxy_pass
指令指定后端服务器的地址。
假设你有一个运行在本地8080端口的应用服务器,并希望使用Nginx作为前端反向代理服务器。
server {
listen 80; # 监听HTTP请求的80端口
server_name example.com; # 你的域名
location / {
proxy_pass http://127.0.0.1:8080; # 指定后端服务器的地址和端口
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中配置负载均衡可以帮助你将客户端请求分发到多个后端服务器,从而提高应用的可用性和扩展性。通过负载均衡,不仅可以实现更高的处理能力,还能在后端服务器故障时提供冗余支持,确保服务的连续性。
upstream
指令定义一个包含所有后端服务器的组。server
块中的适当location
里使用proxy_pass
指令指向这个上游服务器组。假设你有三台后端服务器(backend1.example.com
, backend2.example.com
, backend3.example.com
),你可以按照以下方式配置Nginx:
http {
upstream backend_servers {
# 定义一组后端服务器
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
# 可选: 使用最少连接策略
# least_conn;
# 可选: 为每个服务器设置权重,数值越高,分配到的概率越大
# server backend1.example.com weight=3;
# server backend2.example.com weight=2;
# server backend3.example.com weight=1;
}
server {
listen 80; # 监听HTTP请求的80端口
server_name example.com; # 你的域名
location / {
proxy_pass http://backend_servers; # 将请求转发给上游服务器组
# 设置头部信息以保持会话一致性等
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;
}
}
}
Nginx支持多种负载均衡算法,默认是轮询(Round Robin)。此外,还可以选择其他几种策略:
Least Connections (最小连接):将请求发送到当前连接数最少的服务器上。适用于请求处理时间差异较大的场景。
least_conn;
IP Hash (基于客户端IP的哈希):根据客户端IP地址的哈希值来选择服务器,这样来自同一IP的请求总是被路由到同一个后端服务器,有助于保持会话一致性。
ip_hash;
Weight (权重):允许为每个服务器指定一个权重值,Nginx会根据权重比例分发请求。
server backend1.example.com weight=3;
server backend2.example.com weight=2;
server backend3.example.com weight=1;
虽然Nginx本身不直接支持健康检查,但可以通过第三方模块或结合其他工具(如Consul、Zookeeper等)实现。Nginx Plus版本提供了内置的健康检查功能。
完成配置后,请务必进行配置文件正确性的检查:
sudo nginx -t
如果一切正常,重新加载Nginx使新的配置生效:
sudo nginx -s reload
配置HTTPS对于确保网站的安全性至关重要,它通过SSL/TLS协议加密客户端和服务器之间的通信,保护数据的隐私和完整性。在Nginx中配置HTTPS主要涉及获取SSL证书并编辑Nginx配置文件以启用SSL/TLS。
你可以从可信的证书颁发机构(CA)购买SSL证书,或者使用Let’s Encrypt等提供免费证书的服务。以下是以Let’s Encrypt为例,如何获取证书:
使用Certbot工具自动获取并安装证书。首先需要根据你的操作系统和Web服务器类型选择合适的Certbot版本。例如,在Ubuntu系统上运行Nginx,可以使用如下命令安装Certbot:
sudo apt update
sudo apt install certbot python3-certbot-nginx
然后,运行以下命令来获取并安装证书:
sudo certbot --nginx
按照提示输入你的邮箱地址、同意服务条款,并输入你的域名信息。
获取证书后,你需要编辑Nginx的配置文件来启用HTTPS。通常位于/etc/nginx/nginx.conf
或/etc/nginx/sites-available/default
(具体取决于你的系统和配置)。一个基本的HTTPS配置示例如下:
server {
listen 80; # 监听HTTP请求
server_name yourdomain.com www.yourdomain.com;
return 301 https://$host$request_uri; # 将所有HTTP请求重定向到HTTPS
}
server {
listen 443 ssl; # 监听HTTPS请求
server_name yourdomain.com www.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; # SSL证书路径
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; # 私钥路径
ssl_protocols TLSv1.2 TLSv1.3; # 只启用安全的TLS协议版本
ssl_prefer_server_ciphers on;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
# 你的其他配置...
}
}
完成上述配置后,先测试配置文件是否有语法错误:
sudo nginx -t
如果测试成功,重新加载Nginx使新的配置生效:
sudo systemctl reload nginx
Let’s Encrypt提供的证书有效期为90天,建议设置定期任务(cron job)自动更新证书。Certbot会自动添加一个定时任务来处理这个问题,但你也可以手动检查更新:
sudo certbot renew --dry-run
假设你想在同一台服务器上托管两个不同的网站site1.example.com
和site2.example.com
。
基于域名的虚拟主机配置:
打开nginx.conf
或创建一个新配置文件(如vhosts.conf
)并在其中添加如下内容:
server {
listen 80;
server_name site1.example.com;
location / {
root C:/nginx/html/site1; # 注意路径格式使用正斜杠(/)且盘符后也要有斜杠
index index.html index.htm;
}
}
server {
listen 80;
server_name site2.example.com;
location / {
root C:/nginx/html/site2;
index index.html index.htm;
}
}
确保配置正确:保存对配置文件的修改后,你需要测试配置是否正确。打开命令提示符并输入以下命令:
nginx -t
重新加载Nginx:如果配置测试成功,可以通过以下命令重新加载Nginx使新的配置生效:
nginx -s reload
/
)而不是反斜杠(\
)来指定路径,并且盘符后也需要加上斜杠,例如C:/nginx/html/
。hosts
文件已正确配置。对于开发环境,可以在C:\Windows\System32\drivers\etc\hosts
文件中添加相应的域名指向本地IP地址(通常是127.0.0.1
)。