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

在这里插入图片描述

五、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.confNginx的基本配置文件
mime.typesMIME类型关联的扩展文件
fastcgi.conf与fastcgi相关的配置
proxy.conf与proxy相关的配置
sites.conf配置Nginx提供的网站,包括虚拟主机
2、配置文件结构
配置段层次
main配置段:全局配置段(可能包含event配置段)
  ├── events{}:定义event模型工作特性
  └── http{}:定义http协议相关的配置
        ├── upstream{}:负载均衡配置
        ├── server{}:服务器级别(虚拟主机)
        └── location{}:请求级别(URL与文件系统映射)
变量支持
  1. 内置变量:模块提供的内建变量
  2. 自定义变量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:sizedebug 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;
posted on 2025-09-30 14:57  lxjshuju  阅读(17)  评论(0)    收藏  举报