Nginx 与 LNMP 架构部署
一、Nginx 简介
Nginx 是一款轻量级的 Web 服务器 / 反向代理服务器 及 电子邮件代理服务器。由俄罗斯程序员 Igor Sysoev 开发,最初为俄罗斯大型门户网站 Rambler 使用。首个公开版本 0.1.0 发布于 2004 年 10 月 4 日,以其稳定性、功能丰富、配置示例清晰和低资源消耗著称
Nginx 以其高并发处理能力和低内存占用闻名,广泛应用于包括百度、京东、新浪、网易、腾讯、淘宝等中国大型网站
二、Nginx 的特点与优点
1、主要特性
- 支持高并发连接,可作为 Apache 的替代品,支持高达 5 万并发连接
- 使用高效的事件驱动模型:epoll(Linux)和 kqueue(FreeBSD)
- 支持负载均衡、反向代理、FastCGI(PHP-FPM)、uWSGI(Python)等
- 采用 C 语言编写,资源开销低,性能优于 Perlbal 等
2、主要优点
- 高并发连接能力
- 内存消耗低
- 配置简洁易懂
- 开源免费,成本低
- 支持 Rewrite 规则、健康检查、GZIP 压缩、热部署等
- 模块化设计,支持动态编译
- 良好的文档和社区支持
三、Nginx 的功能与应用类别
1、基本功能
- 静态资源服务
- HTTP/SMTP/POP3 反向代理
- 缓存加速与负载均衡
- 支持 FastCGI、uWSGI
- 模块化过滤(如 GZIP、SSI、图像处理)
- SSL 支持
2、 扩展功能
- 虚拟主机(基于名称/IP)
- Keepalive 支持
- 平滑升级
- 定制日志、URL 重写、访问控制、速率限制等
3、应用场景
- 结合 FastCGI 运行 PHP、JSP、Perl
- 反向代理与负载均衡
- 静态资源服务(HTML、图片)
- 与现代技术栈结合使用
四、Nginx 的模块与工作原理
1、模块分类
- 核心模块:HTTP、EVENT、MAIL
- 基础模块:HTTP Access、FastCGI、Proxy、Rewrite
- 第三方模块:Upstream、Hash、Notice 等
2、功能分类
- Handlers(处理器模块):处理请求并输出内容
- Filters(过滤器模块):修改输出内容
- Proxies(代理器模块):实现代理与负载均衡
3、基本模块
- 核心模块:基本功能和指令
- 事件模块:在 Nginx 内配置网络使用的能力
- 配置模块:提供包含机制
4、进程架构
- Master 进程:管理 Worker 进程,不处理请求
- Worker 进程:处理网络请求,多个 Worker 平等竞争连接
- 使用 互斥锁(
accept_mutex
)避免“惊群”现象 - 每个 Worker 有独立连接池
- 当作为 web 服务器时,最大连接数 =
worker_connections × worker_processes
- 当作为反向代理时,最大连接数 =
(worker_connections × worker_processes)/2
- 当作为 web 服务器时,最大连接数 =
五、Nginx 部署步骤
1、环境准备
1.关闭防火墙和 selinux
略
2.添加 yum 源
略
3.创建nginx用户
[root@nginx ~]# useradd -r -M -s /sbin/mologin nginx
4.安装开发工具包
使用本地yum仓库安装
[root@nginx ~]# yum -y groupinstall "Development Tools"
5.安装依赖包和一些常用工具
使用网络yum仓库
[root@nginx ~]# yum -y install pcre-devel openssl openssl-devel gd-devel gcc gcc-c++ make zlib-devel wget lrzsz
6.创建日志存放目录
[root@nginx ~]# mkdir -p /var/log/nginx
[root@nginx ~]# chown -R nginx.nginx /var/log/nginx
2、编译安装
1.解压 nginx 源码包
[root@nginx ~]# tar -xzvf nginx-1.24.0.tar.gz -C /usr/local/
2.编译安装
[root@nginx ~]# cd /usr/local/nginx-1.24.0/
[root@nginx nginx-1.24.0]# ./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-debug \
> --with-http_ssl_module \
> --with-http_realip_module \
> --with-http_image_filter_module \
> --with-http_gunzip_module \
> --with-http_gzip_static_module \
> --with-http_stub_status_module \
> --http-log-path=/var/log/nginx/access.log \
> --error-log-path=/var/log/nginx/error.log
[root@nginx nginx-1.24.0]# make
[root@nginx nginx-1.24.0]# make install
3、配置环境变量
[root@nginx nginx-1.24.0]# vim /etc/profile.d/nginx.sh
export PATH=/usr/local/nginx/sbin:$PATH
[root@nginx nginx-1.24.0]# . /etc/profile.d/nginx.sh
4、启动
1.启动 nginx,并查看端口情况
[root@nginx nginx-1.24.0]# nginx
[root@nginx nginx-1.24.0]# ss -anlt
2.停止 nginx
[root@nginx conf]# nginx -s stop
3.将 nginx.conf 和 mime.types 复制到 /opt 目录下
[root@nginx conf]# cp nginx.conf /opt/
[root@nginx conf]# cp mime.types /opt/
4.验证 nginx -c
[root@nginx conf]# nginx -c /opt/nginx.conf
[root@nginx conf]# ss -anlt
5.再次停掉 nginx
[root@nginx conf]# nginx -c /opt/nginx.conf -s stop
访问网页
六、LNMP架构部署
架构说明
- Nginx:192.168.100.10(前端处理静态请求,反向代理 PHP)
- MySQL:192.168.100.20(数据库服务)
- PHP:192.168.100.30(处理动态请求)
1、环境准备
1.关闭防火墙和 selinux
略
2.添加 yum 源
略
2、nginx部署
略
3、部署 mysql
1.安装 mysql
略
2.安装后配置
[root@mysql ~]# vim /etc/man_db.conf
MANDATORY_MANPATH /usr/local/mysql/man
[root@mysql ~]# vim /etc/ld.so.conf.d/mysql.conf
/usr/local/mysql/lib
4.部署 php
1.安装依赖包和工具
[root@php ~]# yum -y install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libicu-devel libjpeg libjpeg-devel libpng libpng-devel openldap-devel pcre-devel freetype freetype-devel gmp gmp-devel readline readline-devel libxslt libxslt-devel php-mysqlnd
2.安装 php 源
[root@php ~]# yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
3.启用 php7
[root@php ~]# yum-config-manager --enable remi-php70
4.安装 php
[root@php ~]# yum -y install php php-cli php-fpm php-mysqlnd php-zip php-devel php-gd php-mbstring php-curl php-xml php-pear php-bcmath php-json php-redis
5.配置 php
[root@php ~]# vim /etc/php-fpm.d/www.conf
listen = 0.0.0.0:9000
listen.allowed_clients = 192.168.100.10
6.生成测试页面
[root@php ~]# vim /var/www/html/index.php
<?php
phpinfo();
?>
[root@php ~]# chown -R apache.apache /var/www/html/
7.重启服务
[root@php ~]# systemctl restart php-fpm.service
[root@php ~]# systemctl enable php-fpm.service
5、在 nginx 节点操作
1.整合 nginx 和 php
[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
# 内容如下
location / {
root html;
index index.php index.html index.htm;
}
location ~ \.php$ {
root /var/www/html;
fastcgi_pass 192.168.100.30:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name;
include fastcgi_params;
}
2.测试nginx配置文件
[root@nginx ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@nginx ~]# nginx -s stop
[root@nginx ~]# nginx
6.验证
七、Nginx 配置文件详解
1、配置文件概述
主配置文件路径
- 默认路径:
/usr/local/nginx/conf/nginx.conf
- 启动时可通过
-c
选项指定配置文件
常见配置文件及其作用
配置文件 | 作用 |
---|---|
nginx.conf | Nginx的基本配置文件 |
mime.types | MIME类型关联的扩展文件 |
fastcgi.conf | 与fastcgi相关的配置 |
proxy.conf | 与proxy相关的配置 |
sites.conf | 配置Nginx提供的网站,包括虚拟主机 |
2、配置文件结构
配置段层次
main配置段:全局配置段(可能包含event配置段)├── events{}:定义event模型工作特性└── http{}:定义http协议相关的配置├── upstream{}:负载均衡配置├── server{}:服务器级别(虚拟主机)└── location{}:请求级别(URL与文件系统映射)
变量支持
- 内置变量:模块提供的内建变量
- 自定义变量:
set var_name value
3、配置参数详解
调试与定位问题参数
daemon on|off; # 是否以守护进程方式运行,调试应设为off
master_process on|off; # 是否使用master/worker模型,调试可设为off
error_log 位置 级别; # 配置错误日志
error_log 选项
位置 | 级别 |
---|---|
file stderr syslog:server=address[,parameter=value] memory:size | debug info notice warn error crit alert emerg |
注意:使用debug级别需编译时添加
--with-debug
选项
正常运行必备参数
user USERNAME [GROUPNAME]; # 指定运行worker进程的用户和组
pid /path/to/pid_file; # 指定nginx守护进程的pid文件
worker_rlimit_nofile number; # 设置所有worker进程最大打开文件数(默认1024)
worker_rlimit_core size; # worker进程最大核心文件大小,保持默认即可
性能优化参数
worker_processes n; # worker进程数(建议为CPU核心数或核心数-1)
worker_cpu_affinity cpumask; # 进程绑定CPU核心
timer_resolution interval; # 计时器解析度
worker_priority number; # worker进程的nice值
CPU 绑定示例
0000 0001 # 第一颗CPU核心
0000 0010 # 第二颗CPU核心
0000 0100 # 第三颗CPU核心
0000 1000 # 第四颗CPU核心
事件相关配置(event{}段)
accept_mutex on|off; # 负载均衡锁,on表示worker轮询响应
lock_file file; # 互斥锁文件路径
use [epoll|rtsig|select|poll]; # 事件模型(建议自动选择)
worker_connections 1024; # 每个进程最大连接数
网络连接相关参数
keepalive_timeout 65; # 长连接超时时长(默认65s)
keepalive_requests 100; # 长连接最大请求数
keepalive_disable [msie6|safari|none]; # 禁用长连接的UA类型
tcp_nodelay on; # 启用TCP_NODELAY选项
client_header_timeout number; # 读取请求头超时时长
client_body_timeout number; # 读取请求体超时时长
send_timeout number; # 发送响应超时时长
Fastcgi 的相关配置参数
LNMP:php要启用fpm模型
location ~ \.php$ {root html;fastcgi_pass 127.0.0.1:9000; # 定义反向代理fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;include fastcgi_params;
}
常需要进行调整的参数
worker_processes
worker_connections
worker_cpu_affinity
worker_priority
4、HTTP 配置段详解
HTTP 配置结构
http {include mime.types;default_type application/octet-stream;keepalive_timeout 65;gzip on;upstream { ... } # 负载均衡配置server { # 虚拟主机配置listen 80;server_name localhost;location / { # URL映射配置root html;index index.html index.htm;}}
}
虚拟主机配置示例
server {listen 80;server_name www.example.com;root "/vhost/web";
}
listen 指令格式
listen address[:port];
listen port;