发现楼下咖啡店老板居然用Nginx配置了不同咖啡的访问路径,我才意识到这玩意儿有多强大。
01 环境准备:不要输在起跑线上
在开始安装Nginx之前,充分的准备工作能让后续步骤事半功倍。这就好比做饭前要先洗菜切菜,直接下锅肯定会手忙脚乱。
• 系统环境选择
本教程以CentOS 7为例,但大部分步骤也适用于其他Linux发行版。确保你的系统已联网,并且具有root权限或sudo权限。
如果你使用的是Windows或Mac,建议先安装一个虚拟机软件如VMware,创建一个Linux环境。
• 依赖库安装
Nginx在编译过程中需要一些依赖库,就像汽车运行需要汽油一样。这些依赖库提供了Nginx所需的编译工具、正则表达式支持、压缩算法和安全通信等功能。
使用以下命令可以一次性安装所有必需的依赖:
yum install -y gcc gcc-c++ make automake pcre pcre-devel zlib zlib-devel openssl openssl-devel
这些依赖库各自有着重要的职责:
- GCC编译器:Nginx是用C语言编写的,所以需要GCC来编译源码
- PCRE库:支持正则表达式,用于URL重写等功能
- zlib库:提供gzip压缩功能,减少网络传输量
- OpenSSL库:为HTTPS提供加密通信支持
如果安装依赖时遇到问题,先检查yum源是否配置正确,网络连接是否正常。有时候简单的yum update就能解决很多问题。
02 安装Nginx:从源码到可执行文件
安装Nginx有两种常见方式:包管理器安装和源码编译安装。包管理器安装简单快捷,但源码编译安装可以自定义功能,更灵活。这里我们选择后者,就像自己动手组装电脑而不是买品牌机。
• 下载Nginx源码
访问Nginx官网(http://nginx.org/en/download.html)下载最新的稳定版本源码包。
为什么选择稳定版而不是主线版?因为稳定版经过更多测试,更适合生产环境,就像选择长期支持的系统版本一样可靠。
使用wget命令直接下载到服务器上:
cd /usr/local/src
wget http://nginx.org/download/nginx-1.26.1.tar.gz
如果你的服务器无法访问外网,可以先在本地下载,然后通过SFTP等工具上传到服务器。
• 解压与编译配置
解压下载的源码包并进入目录:
tar -zxvf nginx-1.26.1.tar.gz
cd nginx-1.26.1
接下来是编译前的配置,使用configure脚本:
./configure --prefix=/usr/local/nginx \
--pid-path=/usr/local/nginx/logs/nginx.pid \
--error-log-path=/usr/local/nginx/logs/error.log \
--http-log-path=/usr/local/nginx/logs/access.log \
--with-http_ssl_module \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy
这些配置参数的意思是:
--prefix:指定Nginx安装目录--pid-path:设置进程ID文件位置--with-http_ssl_module:启用HTTPS支持--http-client-body-temp-path:设置客户端请求临时文件路径
注意:/var/temp/nginx/client等临时目录需要手动创建。
如果配置过程中出现错误,仔细阅读错误信息,通常是缺少某些依赖库,安装相应依赖后重新配置即可。
• 编译与安装
配置完成后,执行编译和安装命令:
make
make install
编译过程可能需要几分钟,取决于服务器性能。如果编译出错,可以去网上搜索错误信息,大概率有人遇到过同样的问题。
安装完成后,Nginx会被安装到/usr/local/nginx目录下。可以通过ls /usr/local/nginx查看目录结构:
- sbin:存放Nginx可执行文件
- conf:存放配置文件
- logs:存放日志文件
- html:存放默认网站文件
03 配置Nginx:让交通警察知道规则
安装完Nginx后,它就像一个新雇用的交通警察,我们需要告诉它交通规则,也就是修改配置文件。
• 配置文件结构解析
Nginx的配置文件像一本书,有章节和小节,结构清晰:
main上下文(全局配置)
├─ events上下文(事件模型配置)
└─ http上下文(HTTP服务配置)
├─ server上下文(虚拟主机配置)
│ ├─ location上下文(URL路由配置)
│ └─ location上下文(更多路由规则)
└─ server上下文(更多虚拟主机)
Nginx由一个主进程和多个工作进程组成。主进程的主要目的是读取和评估配置,以及维护工作进程。工作进程执行请求的实际处理。
默认情况下,配置文件名为nginx.conf,放置在/usr/local/nginx/conf目录下。
• 基础配置示例
下面是一个简单的配置示例,帮助我们理解配置文件的结构:
user www;
worker_processes 2;
error_log logs/error.log;
pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root /data/www;
index index.html;
}
}
}
这些配置指令的含义是:
worker_processes:设置工作进程数,通常与CPU核心数相同worker_connections:每个工作进程同时处理的最大连接数sendfile:启用高效文件传输模式keepalive_timeout:设置客户端连接保持活动的时间
• 启动与测试Nginx
进入Nginx的sbin目录,启动Nginx服务:
cd /usr/local/nginx/sbin
./nginx
检查Nginx是否成功启动:
ps -ef | grep nginx
如果看到Nginx进程,说明启动成功。还可以使用curl http://localhost测试,或者直接在浏览器中输入服务器IP地址查看欢迎页面。
常见问题:如果无法访问,可能是防火墙阻止了80端口。CentOS 7可以使用以下命令开放端口:
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
04 完整示例:实战虚拟主机配置
理论学习够了,让我们动手做一个实际示例,就像学做菜不能只看视频,还得亲自下厨。
• 需求分析
假设我们需要实现以下访问规则:
http://192.168.199.27:8081/server1/location1访问:index_sr1_location1.htmlhttp://192.168.199.27:8081/server1/location2访问:index_sr1_location2.htmlhttp://192.168.199.27:8082/server2/location1访问:index_sr2_location1.htmlhttp://192.168.199.27:8082/server2/location2访问:index_sr2_location2.html
同时要求:资源不存在时返回自定义404页面,为不同server配置独立日志文件。
• 文件结构创建
首先创建所需的目录和文件:
# 创建404页面
touch /home/www/404.html
# 创建配置目录
mkdir -p /home/www/conf
# 创建网站目录
mkdir -p /home/www/myweb/server1/location1
mkdir -p /home/www/myweb/server1/location2
mkdir -p /home/www/myweb/server2/location1
mkdir -p /home/www/myweb/server2/location2
# 创建日志目录
mkdir -p /home/www/myweb/server1/logs
mkdir -p /home/www/myweb/server2/logs
在各个location目录中创建对应的HTML文件,比如/home/www/myweb/server1/location1/index.html内容可以是:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<h1>server1下面的location1下面的index.html</h1>
</body>
</html>
404页面可以设计得友好一些:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<h1>不好意思,程序小哥正在加紧维修中 ...... </h1>
</body>
</html>
• 配置Nginx主文件
备份原始配置文件后,编辑/usr/local/nginx/conf/nginx.conf:
user www;
worker_processes 2;
error_log logs/error.log;
pid logs/nginx.pid;
events {
worker_connections 1024;
use epoll;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 定义日志格式
log_format server1 '===>server1 access log';
log_format server2 '===>server2 access log';
# 引用其他配置文件
include /home/www/conf/*.conf;
}
注意第18行的include指令,它允许我们模块化配置,就像代码中引入外部库一样,让主配置更简洁。
• 配置虚拟主机
创建/home/www/conf/server1.conf:
server {
listen 8081;
server_name localhost;
access_log /home/www/myweb/server1/logs/access.log server1;
error_page 404 /404.html;
location /server1/location1 {
root /home/www/myweb;
index index.html;
}
location /server1/location2 {
root /home/www/myweb;
index index.html;
}
location = /404.html {
root /home/www;
index 404.html;
}
}
同样地,创建server2.conf:
server {
listen 8082;
server_name localhost;
access_log /home/www/myweb/server2/logs/access.log server2;
error_page 404 /404.html;
location /server2/location1 {
root /home/www/myweb;
index index.html;
}
location /server2/location2 {
root /home/www/myweb;
index index.html;
}
location = /404.html {
root /home/www;
index 404.html;
}
}
• 重启与测试
让新配置生效:
/usr/local/nginx/sbin/nginx -s reload
如果防火墙开启,需要开放8081和8082端口:
firewall-cmd --zone=public --add-port=8081/tcp --permanent
firewall-cmd --zone=public --add-port=8082/tcp --permanent
firewall-cmd --reload
现在可以通过浏览器访问测试各个地址,也可以故意访问不存在的路径测试404页面是否正常显示。
05 Nginx日常管理技巧
Nginx安装配置完成后,日常管理同样重要,就像买车后需要定期保养。
• 启动、停止和重新加载
Nginx提供了一些简单的命令参数来控制其行为:
# 启动Nginx
/usr/local/nginx/sbin/nginx
# 优雅停止(等待当前请求完成)
/usr/local/nginx/sbin/nginx -s quit
# 快速停止
/usr/local/nginx/sbin/nginx -s stop
# 重新加载配置文件
/usr/local/nginx/sbin/nginx -s reload
# 重新打开日志文件
/usr/local/nginx/sbin/nginx -s reopen
重新加载配置特别有用,它可以在不中断服务的情况下应用新配置,就像给飞行中的飞机更换零件。
• 问题排查技巧
当Nginx出现问题时,有几个排查步骤:
- 检查配置文件语法:
/usr/local/nginx/sbin/nginx -t - 查看错误日志:
tail -f /usr/local/nginx/logs/error.log - 查看访问日志:
tail -f /usr/local/nginx/logs/access.log
日志文件就像Nginx的"黑匣子",记录了详细运行信息,是排查问题的第一手资料。
06 拓展知识:Nginx还能做什么?
除了作为Web服务器,Nginx还有更多强大的功能,就像一个瑞士军刀,除了刀片还有各种小工具。
• 反向代理服务器
Nginx可以作为反向代理,将客户端请求转发到后端服务器,并将响应返回给客户端,像一个大堂经理,接待客户并安排相应的服务人员。
配置示例:
server {
location / {
proxy_pass http://127.0.0.1:8080;
}
location /images/ {
root /data;
}
}
• 负载均衡
当网站流量增加时,Nginx可以将请求分发到多个后端服务器,平衡负载:
http {
upstream myapp {
server 127.0.0.1:8080 weight=3;
server 127.0.0.1:8081 weight=1;
}
server {
location / {
proxy_pass http://myapp;
}
}
}
这个配置将请求按照3:1的比例分发到两个后端服务器。
• 其他常用模块
Nginx有丰富的模块生态系统,可以扩展其功能:
- 重写模块:实现URL重写和重定向
- 防盗链模块:防止其他网站直接链接你的资源
- HTTPS模块:提供安全的加密通信
- 压缩模块:减小传输文件大小,提高速度
结语:从小白到大神的必经之路
通过本教程,你已经完成了Nginx开发环境的搭建,并实现了一个多虚拟主机的配置示例。就像学会了开车的基本操作,接下来需要的是多多练习和实际应用。
Nginx的学习路径很长,从基础配置到高性能优化,再到结合Lua脚本的OpenResty,每一步都能解锁新的技能。
记住,每个Nginx专家都曾是初学者,关键在于动手实践和不断尝试。遇到问题时,官方文档和社区是你的好朋友。
现在,你已经迈出了成为Nginx大神的第一步,继续前进吧!
附录:常用命令速查表
| 功能 | 命令 |
| 启动Nginx |
|
| 停止Nginx |
|
| 重新加载配置 |
|
| 检查配置 |
|
| 查看进程 | `ps -ef |
7411

被折叠的 条评论
为什么被折叠?



