Nginx服务器部署(Linux)
Nginx(发音为"engine x")是一款高性能的HTTP和反向代理服务器,同时也提供IMAP/POP3代理服务。它由俄罗斯程序员Igor Sysoev开发,以其高稳定性、丰富的模块化功能、低内存消耗和高并发处理能力而闻名。
Nginx概念
核心特点
Nginx的强大性能源于其精巧的设计:
- 事件驱动与非阻塞架构:Nginx采用事件驱动(event-driven)和异步非阻塞I/O模型。这意味着它使用一个或少量工作进程(worker processes)就能同时处理成千上万的网络连接,而不会因为等待某个请求的I/O操作(如读取文件、与后端服务器通信)而阻塞,从而极大地提高了CPU利用率和并发处理能力。
- 主从进程模型:Nginx运行时有一个主进程(Master Process) 和一个或多个工作进程(Worker Processes)。主进程负责加载配置、绑定端口和管理工作进程;工作进程则实际处理客户端的连接和请求。这种设计增强了稳定性和可扩展性——如果某个工作进程异常终止,主进程可以立即重启一个新的,保证服务不中断。
- 低资源消耗:Nginx在设计和实现上非常注重效率,在空闲和高并发场景下都能保持较低的内存和CPU占用率。官方数据显示,保持一万个非活跃连接仅需约2.5MB内存。
- 模块化设计:Nginx具有高度模块化的架构。其核心功能由各种模块实现,用户可以根据需要灵活选择和扩展功能,例如通过添加第三方模块来支持Lua脚本等。
应用场景
凭借其高性能和灵活性,Nginx在多种场景下发挥着关键作用:
- 静态内容服务:Nginx极其擅长快速处理HTML、CSS、JavaScript、图片和视频等静态文件的请求,响应速度非常快。
- 反向代理与负载均衡:这是Nginx最核心和广泛的应用之一。作为反向代理,它接收客户端的请求,然后根据配置的规则(如轮询、权重、IP哈希等算法)将请求分发到后端的多台应用服务器(这被称为负载均衡)。这样做可以隐藏真实服务器地址,提升系统的扩展性和可用性。
- 动静分离:为了提升整体性能,通常将动态请求(需要程序处理的)和静态资源的请求分开。Nginx可以直接高效地处理静态请求,而将动态请求转发给后端的PHP、Python、Java等应用服务器处理,从而减轻后端服务器的压力。
- API网关:在现代应用架构中,Nginx常被用作API网关,统一管理入口流量,实现API路由、认证、限流、日志记录等功能。
- SSL/TLS终端:Nginx可以负责处理耗资源的HTTPS加密解密工作,为后端服务器提供一个明文的通信环境,简化后端配置。
Nginx服务器的部署
一个典型的Nginx服务器应用场景是用户终端的应用(Web或者手机App)需要获取图片资源而不部署在本地,那么Nginx就是一个很好的解决方案。下面介绍如何利用Nginx将图片部署在服务器(云)上
下面是在 Ubuntu 系统上部署 Nginx 作为图片服务器,使 /home/root/images 目录下的图片可以通过 URL 访问的详细步骤。这个过程主要分为安装 Nginx、配置 Nginx 以服务指定目录的图片,以及调整系统设置以确保外部可访问。
安装 Nginx
首先,你需要在 Ubuntu 系统上安装 Nginx。
-
更新软件包列表:打开终端,执行以下命令以确保软件包列表是最新的。
sudo apt update -
安装 Nginx:使用 apt 命令安装 Nginx 软件包。
sudo apt install nginx系统可能会提示你确认安装,输入
y并按回车继续 。 -
启动并启用 Nginx:安装完成后,Nginx 服务通常会自动启动。你可以通过以下命令检查其状态、设置它开机自动启动,并进行验证。
sudo systemctl status nginx # 检查运行状态,确认是否为active (running) sudo systemctl enable nginx # 设置为开机自动启动
配置 Nginx 作为图片服务器
接下来,你需要修改 Nginx 的配置文件,告诉它如何提供 /home/root/images 目录下的图片文件。
-
创建网站根目录(如果必要):确保
/home/root/images目录存在,并且其中有你要分享的图片文件。你可以使用以下命令创建该目录(如果不存在的话):sudo mkdir -p /home/root/images -
设置目录权限:确保 Nginx 进程(通常以
www-data用户身份运行)有权读取该目录。可以将目录的所有权更改给www-data用户,或者至少调整目录权限使其可被其他用户读取。一种相对安全的方法是将其所有者设为www-data:sudo chown -R www-data:www-data /home/root/images或者,确保目录至少有读和执行权限(例如
755),文件有读权限(例如644)。 -
编辑 Nginx 配置文件:
- Nginx 的主要配置文件通常位于
/etc/nginx/nginx.conf,但站点特定的配置通常在/etc/nginx/sites-available/目录下。默认的配置文件可能是/etc/nginx/sites-available/default。 - 在编辑之前,建议备份原始文件。
- 使用文本编辑器(如
vim)打开配置文件:sudo vim /etc/nginx/sites-available/default
- Nginx 的主要配置文件通常位于
-
修改服务器块(Server Block)配置:在配置文件中,找到
server块,并对其进行修改或添加一个location块来处理图片路径。以下是一个基本的配置示例,假设你的服务器域名是your-server-ip(请替换为你的服务器实际IP或域名),你希望通过http://your-server-ip/images/来访问图片:server { listen 80; server_name your-server-ip; # 将 your-server-ip 替换为你服务器的实际IP或域名,如果通过IP访问,也可先设置为 _ 或省略 # 设置图片文件的访问位置 location / { # 指定图片文件在服务器上的实际根目录路径 root /home/root/images/; # 开启自动索引功能,当目录中没有index.html时,显示文件列表(可选,根据需求) autoindex on; # 设置静态文件的缓存时间、禁用日志等(可选,用于优化) # 匹配常见的图片文件扩展名 location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 30d; # 缓存30天 add_header Cache-Control "public, immutable"; access_log off; # 可选:关闭访问日志以减少磁盘写入 } } }- 关键点:
listen 80;表示服务器监听 HTTP 的 80 端口。server_name应设置为你的服务器IP或域名。如果暂时通过IP访问,可以设置为_(通配符)或保持默认。location /块定义了当URL路径以/开头时的处理方式。root /home/root/images/;是最重要的指令,它将URL中的根目录映射到服务器文件系统的/home/root/images/目录。确保路径以斜杠结尾。autoindex on;会在用户访问/时列出目录下的文件列表,方便浏览。如果不需要此功能,可以移除。- 针对图片文件的缓存和日志设置是可选的优化项,有助于提高性能 。
- 关键点:
-
测试配置并重新加载 Nginx:
- 修改配置后,务必检查配置文件语法是否正确,这是非常重要的一步,可以避免因配置错误导致服务无法启动 。
如果输出sudo nginx -tsyntax is ok和test is successful,说明配置语法正确。 - 如果测试成功,重新加载 Nginx 配置使其生效,无需重启整个服务:
sudo systemctl reload nginx
- 修改配置后,务必检查配置文件语法是否正确,这是非常重要的一步,可以避免因配置错误导致服务无法启动 。
配置防火墙和网络
为了让其他电脑能够访问,你需要确保服务器的防火墙允许 HTTP 流量(端口 80),并且网络设置正确。
-
配置防火墙(如果 UFW 已启用):Ubuntu 常用 UFW 防火墙。确保允许 Nginx HTTP 流量 。
sudo ufw allow 'Nginx HTTP' # 或者明确允许端口80: sudo ufw allow 80可以使用
sudo ufw status查看规则是否已添加。 -
检查云服务器安全组(如果在云平台如阿里云、腾讯云等):如果你使用的是云服务器(如阿里云、腾讯云等),除了系统防火墙,还需要在云服务商的控制台检查其安全组规则,确保入方向允许 TCP 80 端口的访问(通常源IP设置为
0.0.0.0/0表示对所有IP开放)。 -
获取服务器IP地址:在服务器上使用
ip addr show或hostname -I命令查看服务器的IP地址。确保你的客户端电脑可以网络连通到此服务器(例如,在同一个局域网内,或者服务器有公网IP)。
测试访问
现在,你可以从同一网络下的其他电脑上进行测试了。
-
在客户机的浏览器地址栏中,输入以下格式的URL(将
your-server-ip替换为你服务器的实际IP地址):- 访问特定图片:如果你知道图片文件名,例如
photo1.jpg,URL 为http://your-server-ip/images/photo1.jpg。 - 浏览图片目录列表(如果配置了
autoindex on):URL 为http://your-server-ip/images/。
- 访问特定图片:如果你知道图片文件名,例如
-
如果一切配置正确,浏览器应该能显示图片或列出
/home/root/images目录下的文件列表。
故障排除
如果无法访问,请按以下步骤排查:
- 检查 Nginx 状态:
sudo systemctl status nginx,确保其处于active (running)。 - 检查配置文件语法:再次运行
sudo nginx -t。 - 检查端口监听:在服务器上运行
sudo ss -tulpn | grep 80,看 Nginx 是否在监听 80 端口。 - 检查文件权限:确保
/home/root/images目录及其下的图片文件可被www-data用户或其他人读取。 - 查看 Nginx 错误日志:日志通常在
/var/log/nginx/error.log,使用sudo tail -f /var/log/nginx/error.log查看实时错误信息 。 - 检查防火墙和安全组设置:确认服务器防火墙和云平台安全组规则均已放行 80 端口。
Nginx部署https
http请求由于不满足安全性要求逐渐被https取代,下面介绍如何在服务器上部署含SSL认证的https服务器
| 方案类型 | 证书来源 | 浏览器信任度 | 主要优点 | 主要缺点 | 适用场景 |
|---|---|---|---|---|---|
| 受信任的CA签发 | JoySSL, Symantec等商业机构 | ✅ 受广泛信任 | 专业可靠,无安全警告 | 通常需要付费,申请流程可能稍复杂 | 生产环境、对外服务 |
| 免费CA (Let‘s Encrypt) | Let’s Encrypt | ✅ 受广泛信任 | 免费,可自动化 | 有效期极短(仅6天),需频繁续签 | 测试、短期项目或可自动化管理的环境 |
| 自签名证书 | 使用OpenSSL自行生成 | ❌ 默认不信任 | 完全免费,即时生成,可控性强 | 浏览器会显示安全警告,需手动信任 | 开发测试、内网环境、学习用途 |
生成自签名IP证书(使用OpenSSL)
这是最快捷的方式,非常适合测试和内部使用。核心步骤是为IP地址生成一个包含 subjectAltName 扩展字段的证书,这是现代浏览器识别证书所必须的。
-
创建OpenSSL配置文件
由于默认生成命令不支持直接指定IP的subjectAltName,建议创建一个配置文件(如openssl.cnf),将以下内容中的IP.1替换为你的阿里云服务器公网IP。[ req ] default_bits = 2048 prompt = no default_md = sha256 req_extensions = req_ext distinguished_name = dn [ dn ] C = CN ST = State L = City O = Your Organization OU = Your Unit CN = 你的服务器IP地址 # 例如 123.123.123.123 [ req_ext ] subjectAltName = @alt_names [ alt_names ] IP.1 = 你的服务器IP地址 # 必须与上面CN的值一致,例如 123.123.123.123 -
生成证书和私钥
执行以下命令,它将使用上面的配置文件生成一个有效期为1年的证书。openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout /etc/ssl/private/ip.key \ -out /etc/ssl/certs/ip.crt \ -config openssl.cnf -
验证证书信息
生成后,可以查看证书详情,确认IP地址已正确包含在主题备用名称(Subject Alternative Name)字段中。openssl x509 -in /etc/ssl/certs/ip.crt -text -noout | grep -A1 "Subject Alternative Name"
获取阿里云的SSL证书
在阿里云上获取SSL证书并部署到服务器,让Nginx和您的后端程序共用同一个证书是完全可行的。这是一种常见且高效的实践。下面我将为您梳理清晰的步骤和关键要点。
下图概括了从申请证书到部署使用的核心流程。
下面,我们来详细了解每个阶段的具体操作和选项。
获取阿里云SSL证书
阿里云提供了两种主要的证书类型供您选择,下表对比了它们的核心差异,方便您决策。
| 特性 | 个人测试证书(免费版) | 正式证书(付费) |
|---|---|---|
| 适用场景 | 个人学习、测试、临时项目 | 企业官网、电商平台、对安全和信任度有要求的正式业务 |
| 签发数量 | 每个阿里云实名认证主体(个人/企业)每个自然年可一次性申请20张 | 根据购买数量决定,无此限制 |
| 支持域名 | 单域名(如 example.com 或 www.example.com 算一个) |
支持单域名、多域名、通配符域名 |
| 有效期 | 3个月 | 1年(付费证书有效期通常为1年,可续费) |
| 特殊域名 | 不支持 .edu, .gov, .org, .jp 等 |
无限制 |
申请流程概要:
- 入口:登录阿里云控制台,进入 SSL证书(应用安全) 管理界面。
- 购买/创建:
- 若选择免费证书,请在“SSL证书管理”页面,点击 个人测试证书(原免费证书) 页签下的“立即购买”或“创建证书”。
- 若选择付费证书,请在“正式证书”页签下点击“购买证书”,并选择需要的品牌(如DigiCert、Globalsign)和类型(DV/OV/EV)。
- 填写信息:在申请页面,准确填写需要绑定的域名,并选择域名验证方式。
- 域名验证:这是证明您拥有该域名的关键一步。
- 自动DNS验证(最便捷):如果域名解析服务就在当前阿里云账号下,系统可自动完成验证,强烈推荐此方式。
- 手动DNS验证:如果域名不在阿里云或不在当前账号下,需登录您的域名解析商后台,按提示添加一条CNAME或TXT记录。
- 文件验证:需按提示下载验证文件,并上传到您网站服务器的指定目录下,确保能通过HTTP访问。
- 审核与签发:提交后,CA机构(证书颁发机构)会进行审核。免费DV证书通常会在几分钟内签发;付费的OV/EV证书则需要更严格的审核,可能需数个工作日。
证书签发后,状态会变为“已签发”,接下来就是部署到您的Ubuntu Nginx服务器上。
- 下载证书:在SSL证书管理页面,找到对应证书,点击“下载”。在弹出窗口中,服务器类型请选择 Nginx。下载后将得到一个.zip压缩包。
- 上传证书:解压下载的包,您会得到两个文件:一个
.pem文件(证书)和一个.key文件(私钥)。请妥善保管私钥,切勿泄露。将这两个文件上传到您的服务器,建议放在一个专门的目录下,例如/etc/ssl/。
注意:确保你的阿里云ECS安全组规则已经放行了443端口(HTTPS)的入站流量。
在Nginx中配置证书
生成证书后,需要将其配置到Nginx中。
-
修改Nginx配置文件
在你的Nginx服务器块(通常在/etc/nginx/sites-available/default)中启用HTTPS。server { listen 443 ssl; server_name your-domain.com; # 请替换为您的域名或IP(若证书支持IP) ssl_certificate /etc/nginx/ssl/your-domain.pem; # 替换为您的.pem文件路径 ssl_certificate_key /etc/nginx/ssl/your-domain.key; # 替换为您的.key文件路径 # 安全增强配置(可选但推荐) ssl_protocols TLSv1.2 TLSv1.3; # 使用安全的TLS协议版本 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_prefer_server_ciphers on; ssl_session_timeout 5m; # 您的其他配置,例如静态资源位置或反向代理设置 location / { root /var/www/html; index index.html index.htm; } # 如果您的后端程序在同一台服务器上,可以配置反向代理 location /api/ { # 假设API接口以/api/开头 proxy_pass http://127.0.0.1:8080; # 转发到后端服务地址 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; } } # 可选:将HTTP请求重定向到HTTPS,实现全站加密 server { listen 80; server_name your-domain.com; return 301 https://$server_name$request_uri; } -
重启Nginx并测试
配置完成后,重启Nginx使配置生效。sudo nginx -t # 测试配置文件语法 sudo systemctl restart nginx # 重启Nginx服务完成后,在浏览器中访问
https://你的服务器IP。由于是自签名证书,浏览器会显示“不安全”警告,这是正常现象。在高级选项中选择“继续前往”即可。

浙公网安备 33010602011771号