0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Nginx基础安装与配置教程

马哥Linux运维 来源:CSDN技术社区 2025-06-13 16:13 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Nginx网站服务:从入门到LNMP架构实战

前言

说起Web服务器,大家第一反应可能是Apache,但作为一个在运维路上摸爬滚打的技术人,我必须要为Nginx正名一下!这个由俄罗斯大神Igor Sysoev开发的轻量级HTTP服务器,真的是我见过最"能打"的Web服务器之一。

为什么这么说?单台服务器能扛30000-50000个并发连接,内存消耗还特别低,这性能简直逆天!今天就来分享一下我在实际项目中使用Nginx的经验,从基础安装到LNMP架构搭建,希望能帮到正在学习的小伙伴们。

一、Nginx基础安装与配置

Nginx vs Apache 性能对比图

┌─────────────────────────────────────────────────────────────────────┐
│          Nginx vs Apache 性能对比             │
├─────────────────────────────────────────────────────────────────────┤
│                                   │
│  Nginx              Apache            │
│ ┌─────────────────────┐     ┌─────────────────────┐      │
│ │  并发: 30K-50K   │     │  并发: 1K-5K    │      │
│ │  内存: 低     │     │  内存: 较高    │      │
│ │  CPU: 低      │     │  CPU: 较高     │      │
│ │  模式: 异步事件   │     │  模式: 进程/线程  │      │
│ │  静态文件: 优秀   │     │  静态文件: 良好  │      │
│ │  配置: 简洁    │     │  配置: 功能丰富  │      │
│ │  负载均衡: 内置   │     │  负载均衡: 需模块 │      │
│ │  反向代理: 高效   │     │  动态内容: 强大  │      │
│ └─────────────────────┘     └─────────────────────┘      │
│                                   │
└─────────────────────────────────────────────────────────────────────┘

1.1 编译安装Nginx

首先我们需要准备编译环境,这一步很关键:

# 安装必要的依赖包
[root@localhost ~]# yum -y install pcre-devel zlib-devel gcc++ gcc

为什么要安装这些包?

•pcre-devel:支持正则表达式

•zlib-devel:支持gzip压缩

•gcc++/gcc:编译器

接下来创建专用用户(安全第一):

# 创建nginx用户,不允许登录shell
[root@localhost ~]# useradd -M -s /sbin/nologin nginx

Nginx 安装流程图

┌─────────────────────────────────────────────────────────────┐
│         Nginx 安装配置流程             │
├─────────────────────────────────────────────────────────────┤
│                               │
│ ┌─────────────────┐                    │
│ │ 1. 安装依赖包  │ ← pcre-devel zlib-devel gcc      │
│ └─────────────────┘                    │
│      ↓                         │
│ ┌─────────────────┐                    │
│ │ 2. 创建运行用户 │ ← useradd -M -s /sbin/nologin nginx  │
│ └─────────────────┘                    │
│      ↓                         │
│ ┌─────────────────┐                    │
│ │ 3. 编译安装   │ ← ./configure && make && make install │
│ └─────────────────┘                    │
│      ↓                         │
│ ┌─────────────────┐                    │
│ │ 4. 创建服务脚本 │ ← /etc/init.d/nginx          │
│ └─────────────────┘                    │
│      ↓                         │
│ ┌─────────────────┐                    │
│ │ 5. 启动测试   │ ← systemctl start nginx       │
│ └─────────────────┘                    │
│                               │
│ 关键配置参数:                       │
│ --prefix=/usr/local/nginx                 │
│ --user=nginx                        │
│ --group=nginx                       │
│ --with-http_stub_status_module               │
│                               │
└─────────────────────────────────────────────────────────────┘

1.2 编译配置

这里是关键步骤,配置参数要仔细:

[root@localhost ~]# tar zxf nginx-1.12.0.tar.gz
[root@localhost ~]#cdnginx-1.12.0

# 配置编译参数
[root@localhost nginx-1.12.0]# ./configure 
  --prefix=/usr/local/nginx      # 安装目录
  --user=nginx            # 运行用户
  --group=nginx            # 运行组
  --with-http_stub_status_module   # 状态统计模块

# 编译安装
[root@localhost nginx-1.12.0]# make && make install

小技巧:创建软链接方便使用

[root@localhost ~]#ln-s /usr/local/nginx/sbin/nginx /usr/local/sbin/

1.3Nginx配置文件结构

┌─────────────────────────────────────────────────────────────┐
│          Nginx 配置文件结构            │
├─────────────────────────────────────────────────────────────┤
│                               │
│ ┌─────────────────────────────────────────────────────┐  │
│ │ 全局配置 (Global)                  │  │
│ │ ┌─────────────────────────────────────────────────┐ │  │
│ │ │ user nginx;                   │ │  │
│ │ │ worker_processes 1;               │ │  │
│ │ │ error_log logs/error.log;            │ │  │
│ │ │ pid logs/nginx.pid;               │ │  │
│ │ └─────────────────────────────────────────────────┘ │  │
│ └─────────────────────────────────────────────────────┘  │
│                               │
│ ┌─────────────────────────────────────────────────────┐  │
│ │ 事件配置 (Events)                  │  │
│ │ ┌─────────────────────────────────────────────────┐ │  │
│ │ │ events {                    │ │  │
│ │ │   use epoll;                 │ │  │
│ │ │   worker_connections 4096;          │ │  │
│ │ │ }                        │ │  │
│ │ └─────────────────────────────────────────────────┘ │  │
│ └─────────────────────────────────────────────────────┘  │
│                               │
│ ┌─────────────────────────────────────────────────────┐  │
│ │ HTTP配置 (HTTP)                   │  │
│ │ ┌─────────────────────────────────────────────────┐ │  │
│ │ │ http {                     │ │  │
│ │ │   include mime.types;             │ │  │
│ │ │   sendfile on;                │ │  │
│ │ │   ┌─────────────────────────────────────────┐ │ │  │
│ │ │   │ 服务器配置 (Server)           │ │ │  │
│ │ │   │ ┌─────────────────────────────────────┐ │ │ │  │
│ │ │   │ │ server {              │ │ │ │  │
│ │ │   │ │   listen 80;           │ │ │ │  │
│ │ │   │ │   server_name www.example.com;  │ │ │ │  │
│ │ │   │ │   ┌─────────────────────────────┐ │ │ │ │  │
│ │ │   │ │   │ 位置配置 (Location)     │ │ │ │ │  │
│ │ │   │ │   │ location / {        │ │ │ │ │  │
│ │ │   │ │   │   root html;        │ │ │ │ │  │
│ │ │   │ │   │   index index.html;    │ │ │ │ │  │
│ │ │   │ │   │ }              │ │ │ │ │  │
│ │ │   │ │   └─────────────────────────────┘ │ │ │ │  │
│ │ │   │ │ }                  │ │ │ │  │
│ │ │   │ └─────────────────────────────────────┘ │ │ │  │
│ │ │   └─────────────────────────────────────────┘ │ │  │
│ │ │ }                        │ │  │
│ │ └─────────────────────────────────────────────────┘ │  │
│ └─────────────────────────────────────────────────────┘  │
│                               │
└─────────────────────────────────────────────────────────────┘

核心配置示例

# 全局配置
user nginx;          # 运行用户
worker_processes 1;      # 工作进程数(建议=CPU核数)
error_log logs/error.log;   # 错误日志

# 事件配置
events {
  use epoll;        # 使用epoll模型(Linux推荐)
  worker_connections 4096; # 每个进程最大连接数
}

# HTTP配置
http {
  include    mime.types;
  default_type application/octet-stream;
  sendfile   on;     # 开启高效文件传输
  keepalive_timeout 65;   # 连接保持时间
 
  server {
    listen    80;
    server_name www.example.com;
   
    location / {
      root  html;
      index index.html index.htm;
    }
  }
}

1.4 系统服务脚本

为了方便管理,我们创建一个系统服务脚本:

[root@localhost ~]# vim /etc/init.d/nginx
#!/bin/bash
#chkconfig: - 99 20
#description: Nginx Service Control Script

PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"

case"$1"in
start)
 $PROG
  ;;
stop)
 kill-s QUIT $(cat$PIDF)
  ;;
restart)
 $0stop
 $0start
  ;;
reload)
 kill-s HUP $(cat$PIDF)  # 重载配置,不中断服务
  ;;
*)
 echo"Usage:$0{start|stop|restart|reload}"
 exit1
esac
exit0
# 添加执行权限并注册服务
[root@localhost ~]#chmod+x /etc/init.d/nginx
[root@localhost ~]# chkconfig --add nginx
[root@localhost ~]# systemctl start nginx

二、Nginx访问控制

2.1 基于用户认证的访问控制

访问控制流程图

┌─────────────────────────────────────────────────────────────┐
│          Nginx 访问控制机制            │
├─────────────────────────────────────────────────────────────┤
│                               │
│ ┌─────────┐   ┌─────────┐   ┌─────────┐        │
│ │ 用户请求 │────→│ Nginx │────→│ 认证检查 │        │
│ │ Request │   │ Server │   │ Auth? │        │
│ └─────────┘   └─────────┘   └─────────┘        │
│                    │           │
│             ┌────────────┼────────────┐    │
│             ▼      │      ▼    │
│          ┌─────────────┐   │   ┌─────────────┐ │
│          │ 401 未授权  │   │   │ 200 成功  │ │
│          │ 要求认证   │   │   │ 返回内容  │ │
│          └─────────────┘   │   └─────────────┘ │
│             ▲      │      ▲    │
│             │      │      │    │
│           认证失败   认证成功         │
│                               │
│ 配置示例:                         │
│ auth_basic "管理员区域";                  │
│ auth_basic_user_file /path/to/passwd;           │
│                               │
└─────────────────────────────────────────────────────────────┘

有时候我们需要对某些目录进行保护,这时候用户认证就派上用场了:

# 安装htpasswd工具
[root@localhost ~]# yum install -y httpd-tools

# 创建用户密码文件
[root@localhost ~]# htpasswd -c /usr/local/nginx/passwd.db admin
New password:
Re-typenew password:
Adding passwordforuser admin

设置文件权限(重要):

[root@localhost ~]#chmod400 /usr/local/nginx/passwd.db
[root@localhost ~]#chownnginx /usr/local/nginx/passwd.db

配置nginx.conf

server {
  location /admin {
    auth_basic"管理员区域";          # 认证提示信息
    auth_basic_user_file /usr/local/nginx/passwd.db; # 密码文件路径
    root html;
    index index.html;
  }
}

2.2 基于IP的访问控制

这个功能在实际项目中超级实用,比如只允许办公网IP访问后台:

server {
  location /admin {
    deny 192.168.1.100;   # 拒绝特定IP
    allow 192.168.1.0/24;  # 允许整个网段
    allow 10.0.0.0/8;    # 允许内网
    deny all;        # 拒绝其他所有IP
  }
}

规则执行顺序:从上到下,匹配到就停止!

三、虚拟主机配置

一台服务器跑多个网站?没问题!Nginx的虚拟主机功能强大又灵活。

虚拟主机类型对比

┌─────────────────────────────────────────────────────────────────────┐
│           Nginx 虚拟主机类型               │
├─────────────────────────────────────────────────────────────────────┤
│                                   │
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐   │
│ │  基于域名    │ │  基于IP    │ │  基于端口    │   │
│ │ Name-based   │ │  IP-based   │ │ Port-based   │   │
│ ├─────────────────┤ ├─────────────────┤ ├─────────────────┤   │
│ │• 同一IP不同域名 │ │• 不同IP同一端口 │ │• 同一IP不同端口 │   │
│ │• www.site1.com │ │• 192.168.1.10  │ │• :8080     │   │
│ │• www.site2.com │ │• 192.168.1.11  │ │• :8081     │   │
│ │        │ │        │ │        │   │
│ │优点:最常用   │ │优点:完全隔离  │ │优点:简单易配  │   │
│ │缺点:需要域名  │ │缺点:需要多IP  │ │缺点:端口管理  │   │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘   │
│                                   │
└─────────────────────────────────────────────────────────────────────┘

3.1 基于域名的虚拟主机

这是最常用的方式,一个IP绑定多个域名:

# 准备网站目录
[root@localhost ~]#mkdir-p /var/www/html/{site1,site2}
[root@localhost ~]#echo"Site1 Homepage"> /var/www/html/site1/index.html
[root@localhost ~]#echo"Site2 Homepage"> /var/www/html/site2/index.html

nginx配置

# 网站1
server {
  listen    80;
  server_name www.site1.com;
  access_log  logs/site1.access.log;
 
  location / {
    root  /var/www/html/site1;
    index index.html;
  }
}

# 网站2 
server {
  listen    80;
  server_name www.site2.com;
  access_log  logs/site2.access.log;
 
  location / {
    root  /var/www/html/site2;
    index index.html;
  }
}

3.2 基于端口的虚拟主机

当域名不够用时,可以用不同端口:

server {
  listen    8080;
  server_name localhost;
 
  location / {
    root  /var/www/html/site1;
    index index.html;
  }
}

server {
  listen    8081;
  server_name localhost;
 
  location / {
    root  /var/www/html/site2;
    index index.html;
  }
}

四、LNMP架构搭建

重头戏来了!LNMP(Linux + Nginx + MySQL + PHP)是我最喜欢的Web架构组合。

LNMP架构图

┌─────────────────────────────────────────────────────────────────────┐
│            LNMP 架构图                  │
├─────────────────────────────────────────────────────────────────────┤
│                                   │
│            ┌─────────────┐               │
│            │  用户请求  │               │
│            │ HTTP Request│               │
│            └──────┬──────┘               │
│                │                   │
│                ▼                   │
│ ┌─────────────────────────────────────────────────────────────┐  │
│ │           Nginx                 │  │
│ │         (Web服务器/反向代理)             │  │
│ │ ┌─────────────────┐       ┌─────────────────┐    │  │
│ │ │  静态文件    │       │  PHP请求    │    │  │
│ │ │  直接返回    │       │  转发给FPM   │    │  │
│ │ │ .css .js .png  │       │  .php文件   │    │  │
│ │ └─────────────────┘       └─────────────────┘    │  │
│ └─────────────────────────────────┬───────────────────────────┘  │
│                  │                │
│                  ▼                │
│ ┌─────────────────────────────────────────────────────────────┐  │
│ │          PHP-FPM                 │  │
│ │        (PHP进程管理器)                │  │
│ │      处理PHP脚本,连接数据库              │  │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐      │  │
│ │ │ Worker1 │ │ Worker2 │ │ Worker3 │ │ Worker4 │      │  │
│ │ │ Process │ │ Process │ │ Process │ │ Process │      │  │
│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘      │  │
│ └─────────────────────────┬───────────────────────────────────┘  │
│              │                    │
│              ▼                    │
│ ┌─────────────────────────────────────────────────────────────┐  │
│ │           MySQL                  │  │
│ │         (数据库服务器)                │  │
│ │        存储和管理数据                 │  │
│ │ ┌─────────────────────────────────────────────────────┐  │  │
│ │ │ 数据库表: users, posts, products, orders...    │  │  │
│ │ └─────────────────────────────────────────────────────┘  │  │
│ └─────────────────────────────────────────────────────────────┘  │
│                                   │
│ 通信端口:                             │
│ • Nginx: 80/443                          │
│ • PHP-FPM: 9000 (FastCGI)                     │
│ • MySQL: 3306                           │
│                                   │
└─────────────────────────────────────────────────────────────────────┘

4.1 MySQL安装配置

# 安装编译依赖
[root@localhost ~]# yum -y install ncurses-devel gcc-c++ cmake

# 编译安装MySQL
[root@localhost ~]# tar -zxf mysql-5.6.36.tar.gz
[root@localhost ~]#cdmysql-5.6.36
[root@localhost mysql-5.6.36]# cmake 
  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql 
  -DDEFAULT_CHARSET=utf8 
  -DDEFAULT_COLLATION=utf8_general_ci 
  -DWITH_EXTRA_CHARSETS=all 
  -DSYSCONFDIR=/etc

[root@localhost mysql-5.6.36]# make && make install

初始化数据库

[root@localhost ~]# groupadd mysql
[root@localhost ~]# useradd -M -s /sbin/nologin mysql -g mysql
[root@localhost ~]#chown-R mysql:mysql /usr/local/mysql

# 初始化数据库
[root@localhost ~]# /usr/local/mysql/scripts/mysql_install_db 
  --basedir=/usr/local/mysql 
  --datadir=/usr/local/mysql/data 
  --user=mysql

4.2 PHP-FPM安装配置

PHP-FPM是关键组件,负责处理PHP请求:

# 安装PHP依赖
[root@localhost ~]# yum -y install gd libxml2-devel libjpeg-devel libpng-devel

# 编译PHP
[root@localhost ~]# tar -zxf php-5.5.38.tar.gz
[root@localhost ~]#cdphp-5.5.38
[root@localhost php-5.5.38]# ./configure 
  --prefix=/usr/local/php5 
  --with-mysql=/usr/local/mysql 
  --with-mysqli=/usr/local/mysql/bin/mysql_config 
  --enable-fpm           # 关键:启用FPM
  --enable-mbstring 
  --with-gd

[root@localhost php-5.5.38]# make && make install

配置PHP-FPM

[root@localhost ~]#cd/usr/local/php5/etc/
[root@localhost etc]#cpphp-fpm.conf.default php-fpm.conf
[root@localhost etc]# useradd -M -s /sbin/nologin php

关键配置项

# php-fpm.conf
pid = run/php-fpm.pid
user = php
group = php
pm.max_children = 50    # 最大子进程数
pm.start_servers = 20   # 启动时进程数
pm.min_spare_servers = 5  # 最小空闲进程
pm.max_spare_servers = 35 # 最大空闲进程

4.3 Nginx与PHP集成

这是LNMP架构的核心配置:

server {
  listen    80;
  server_name www.example.com;
  root     /var/www/html;
  index    index.php index.html;
 
 # PHP文件处理
  location ~ .php$ {
    root      /var/www/html;
    fastcgi_pass  127.0.0.1:9000;  # PHP-FPM监听端口
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include    fastcgi_params;
  }
 
 # 静态文件处理
  location ~ .(css|js|png|jpg|gif|ico|svg)$ {
    expires 1y;
    add_header Cache-Control"public, immutable";
  }
}

4.4 测试LNMP环境

创建PHP测试文件:

[root@localhost ~]#mkdir/var/www/html
[root@localhost ~]# vim /var/www/html/test.php
 LNMP环境测试页面";
echo"
"; // PHP版本信息 echo"

PHP信息

"; echo"

PHP版本:".phpversion() ."

"; echo"

服务器时间:".date('Y-m-d Hs') ."

"; // 测试MySQL连接 echo"

MySQL连接测试

"; $link=mysqli_connect('localhost','root','123456'); if($link) { echo"

MySQL连接:成功

"; $version=mysqli_get_server_info($link); echo"

MySQL版本:".$version."

"; mysqli_close($link); }else{ echo"

MySQL连接:失败

"; echo"

错误信息:".mysqli_connect_error() ."

"; } // 显示PHP扩展 echo"

已加载的PHP扩展

"; $extensions=get_loaded_extensions(); echo"
"; foreach($extensionsas$ext) { echo"

• ".$ext."

"; } echo"
"; // 服务器信息 echo"

服务器信息

"; echo"

操作系统".php_uname() ."

"; echo"

Web服务器:".$_SERVER['SERVER_SOFTWARE'] ."

"; echo"

文档根目录:".$_SERVER['DOCUMENT_ROOT'] ."

"; ?> AI写代码php 运行 ![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

访问http://your-server-ip/test.php看到成功信息就OK了!

LNMP服务启动脚本

#!/bin/bash
# LNMP一键启动脚本

echo" 启动LNMP服务..."

# 启动MySQL
echo"启动MySQL..."
/usr/local/mysql/bin/mysqld_safe --user=mysql &
sleep3

# 启动PHP-FPM
echo"启动PHP-FPM..."
/usr/local/php5/sbin/php-fpm

# 启动Nginx
echo"启动Nginx..."
/usr/local/nginx/sbin/nginx

echo" LNMP服务启动完成!"
echo" 服务状态检查:"
echo"MySQL:$(pgrep mysqld > /dev/null && echo ' 运行中' || echo ' 未运行')"
echo"PHP-FPM:$(pgrep php-fpm > /dev/null && echo ' 运行中' || echo ' 未运行')"
echo"Nginx:$(pgrep nginx > /dev/null && echo ' 运行中' || echo ' 未运行')"

五、性能优化技巧

5.1 Nginx状态监控

启用状态统计模块,实时监控服务器状态:

location /nginx-status {
  stub_status on;
  access_log off;
  allow 127.0.0.1;    # 只允许本机访问
  allow 192.168.1.0/24; # 允许内网访问
  deny all;
}

访问/nginx-status可以看到:

Active connections: 291
server accepts handled requests
16630948 16630948 31070465
Reading: 6 Writing: 179 Waiting: 106


AI写代码

状态说明

Active connections: 当前活跃连接数

accepts: 已接受的连接数

handled: 已处理的连接数

requests: 总请求数

Reading: 正在读取请求头的连接数

Writing: 正在向客户端写响应的连接数

Waiting: 空闲客户端连接数

5.2 性能调优参数

# 全局优化
user nginx;
worker_processes auto;     # 自动检测CPU核数
worker_cpu_affinity auto;   # CPU亲和性绑定
worker_rlimit_nofile 65535;  # 工作进程最大文件描述符

# 事件优化
events {
  use epoll;         # Linux下使用epoll
  worker_connections 65535; # 每个进程最大连接数
  multi_accept on;      # 一次接受多个连接
  accept_mutex off;     # 关闭accept锁
}

http {
 # 基础优化
  sendfile on;        # 开启高效文件传输
  tcp_nopush on;       # 优化网络包传输
  tcp_nodelay on;      # 减少网络延迟
  keepalive_timeout 30;   # 连接保持时间
  keepalive_requests 1000;  # 每个连接最大请求数
 
 # 缓存优化
  open_file_cache max=100000 inactive=20s;
  open_file_cache_valid 30s;
  open_file_cache_min_uses 2;
  open_file_cache_errors on;
 
 # Gzip压缩
  gzip on;
  gzip_vary on;
  gzip_min_length 1024;
  gzip_comp_level 6;
  gzip_types
    text/plain
    text/css
    text/xml
    text/javascript
    application/json
    application/javascript
    application/xml+rss
    application/atom+xml
    image/svg+xml;
 
 # 缓冲区优化
  client_body_buffer_size 128k;
  client_header_buffer_size 32k;
  large_client_header_buffers 4 32k;
  client_max_body_size 50m;
}

5.3 系统内核优化

# /etc/sysctl.conf 系统内核优化

# 网络优化
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1024 65535

# 文件描述符优化
fs.file-max = 6815744

# 应用生效
sysctl -p

5.4 PHP-FPM性能优化

# php-fpm.conf 优化配置

[global]
pid = run/php-fpm.pid
error_log =log/php-fpm.log
log_level = warning

[www]
user = php
group = php
listen = 127.0.0.1:9000
listen.backlog = 65535

# 进程管理优化
pm = dynamic          # 动态进程管理
pm.max_children = 100     # 最大子进程数
pm.start_servers = 20     # 启动时进程数
pm.min_spare_servers = 10   # 最小空闲进程
pm.max_spare_servers = 30   # 最大空闲进程
pm.max_requests = 1000     # 每个进程最大请求数

# 慢日志
slowlog =log/slow.log
request_slowlog_timeout = 2

# 资源限制
rlimit_files = 65535
rlimit_core = 0

六、安全加固

6.1 隐藏版本信息

http {
  server_tokens off;     # 隐藏Nginx版本
 
 # 自定义Server头
  more_set_headers"Server: WebServer";
}

6.2 防止恶意请求

http {
 # 限制请求方法
  map$request_method$not_allowed_method{
    default 1;
    GET 0;
    POST 0;
    HEAD 0;
  }
 
 # 限制User-Agent
  map$http_user_agent$blocked_agent{
    default 0;
    ~*malicious 1;
    ~*bot 1;
    ~*crawler 1;
  }
 
  server {
   # 拒绝不允许的请求方法
   if($not_allowed_method) {
     return405;
    }
   
   # 拒绝恶意User-Agent
   if($blocked_agent) {
     return403;
    }
   
   # 防止目录遍历
    location ~ /. {
      deny all;
      access_log off;
      log_not_found off;
    }
   
   # 限制文件上传大小
    client_max_body_size 10m;
  }
}

6.3 SSL/TLS配置

server {
  listen 443 ssl http2;
  server_name www.example.com;
 
 # SSL证书配置
  ssl_certificate /path/to/cert.pem;
  ssl_certificate_key /path/to/key.pem;
 
 # SSL优化
  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
  ssl_prefer_server_ciphers off;
  ssl_session_cache shared10m;
  ssl_session_timeout 10m;
 
 # 安全头
  add_header Strict-Transport-Security"max-age=31536000; includeSubDomains"always;
  add_header X-Frame-Options DENY always;
  add_header X-Content-Type-Options nosniff always;
  add_header X-XSS-Protection"1; mode=block"always;
 
 # HTTP重定向到HTTPS
  error_page 497 https://$server_name$request_uri;
}

七、监控与日志

7.1 日志格式优化

http {
 # 自定义日志格式
  log_format main'$remote_addr - $remote_user [$time_local] "$request" '
         '$status $body_bytes_sent "$http_referer" '
         '"$http_user_agent" "$http_x_forwarded_for" '
         '$request_time $upstream_response_time';
 
 # JSON格式日志(便于分析)
  log_format json escape=json'{'
         '"time": "$time_iso8601",'
         '"remote_addr": "$remote_addr",'
         '"request": "$request",'
         '"status": $status,'
         '"body_bytes_sent": $body_bytes_sent,'
         '"request_time": $request_time,'
         '"upstream_response_time": "$upstream_response_time"'
         '}';
 
  access_log logs/access.log main;
  error_log logs/error.log warn;
}

7.2 日志轮转

# /etc/logrotate.d/nginx
/usr/local/nginx/logs/*.log{
  daily          # 每天轮转
  missingok       # 文件不存在不报错
  rotate 30       # 保留30天
  compress        # 压缩旧日志
  delaycompress     # 延迟压缩
  notifempty       # 空文件不轮转
  create 644 nginx nginx # 创建新文件权限
  postrotate
    /bin/kill -USR1 $(cat/usr/local/nginx/logs/nginx.pid 2>/dev/null) 2>/dev/null || :
  endscript
}

总结

通过这次完整的实战分享,我们从零开始搭建了一个完整的LNMP环境,涵盖了:

核心知识点

1.Nginx基础安装

• 编译安装与配置

• 服务脚本创建

• 配置文件结构理解

2.访问控制

• 基于用户认证

• 基于IP地址控制

• 安全策略配置

3.虚拟主机

• 基于域名的虚拟主机

• 基于端口的虚拟主机

• 多站点管理

4.LNMP架构

• MySQL数据库安装

• PHP-FPM配置优化

• Nginx与PHP集成

5.性能优化

• 内核参数调优

• Nginx配置优化

• 缓存策略配置

6.安全加固

• 版本信息隐藏

• 恶意请求防护

• SSL/TLS配置

实战经验分享

┌─────────────────────────────────────────────────────────────┐
│          Nginx实战经验总结             │
├─────────────────────────────────────────────────────────────┤
│                               │
│  关键要点:                        │
│ ┌─────────────────────────────────────────────────────┐  │
│ │ 1. 安全第一:专用用户 + 权限控制           │  │
│ │ 2. 性能优化:合理配置进程数和连接数          │  │
│ │ 3. 监控重要:日志分析 + 状态监控           │  │
│ │ 4. 架构清晰:理解各组件协作关系            │  │
│ │ 5. 持续学习:跟进新版本和最佳实践           │  │
│ └─────────────────────────────────────────────────────┘  │
│                               │
│  生产环境建议:                      │
│ • worker_processes = CPU核数                │
│ • worker_connections = 10240-65535            │
│ • 开启gzip压缩节省带宽                   │
│ • 配置SSL证书提升安全性                   │
│ • 定期备份配置文件                     │
│ • 监控服务器资源使用情况                  │
│                               │
└─────────────────────────────────────────────────────────────┘

常用命令速查

# Nginx服务管理
nginx -t          # 检查配置文件语法
nginx -s reload      # 重载配置(不中断服务)
nginx -s stop       # 停止服务
nginx -s quit       # 优雅停止
nginx -V          # 查看编译参数

# 进程管理
ps aux | grep nginx    # 查看Nginx进程
netstat -tlnp | grep :80  # 查看80端口占用
lsof -i :80        # 查看80端口进程

# 日志分析
tail-f /usr/local/nginx/logs/access.log  # 实时查看访问日志
tail-f /usr/local/nginx/logs/error.log  # 实时查看错误日志

Nginx真的是一个非常优秀的Web服务器,在高并发场景下表现尤其出色。掌握了这些核心技能,相信大家在实际项目中能够游刃有余地使用Nginx,搭建出高性能、高可用的Web服务!

记住:实践是最好的老师,多动手操作,多在生产环境中验证,才能真正掌握Nginx的精髓。

恭喜你完成了Nginx从入门到实战的完整学习!继续加油!

链接:https://blog.csdn.net/jxjdhdnd/article/details/148338688

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Web
    Web
    +关注

    关注

    2

    文章

    1309

    浏览量

    74942
  • 服务器
    +关注

    关注

    14

    文章

    10344

    浏览量

    91737
  • nginx
    +关注

    关注

    0

    文章

    193

    浏览量

    13203

原文标题:Nginx网站服务:从入门到LNMP架构实战

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【NanoPi NEO试用体验】之安装配置Nginx环境WEB网站详解

    速度。root@nrjs-cn:~# apt-get install nginx【1.3启动NGINX服务】待NGINX安装完成后不需要做任何配置
    发表于 10-18 12:25

    nginx中的sendfile配置说明

    nginx配置sendfile及详细说明
    发表于 05-05 08:08

    docker中安装nginx的详细过程

    Centos7安装nginx(二)之docker中安装nginx
    发表于 10-23 17:10

    Docker的端口映射和nginx安装流程

    Docker的端口映射和nginx安装
    发表于 04-14 11:44

    Docker端口映射和nginx安装

    Docker的端口映射和nginx安装
    发表于 04-17 11:44

    Centos7Nginx安装配置步骤

    Centos7 Nginx安装配置,防火墙开启端口监听
    发表于 06-02 12:58

    nginx错误页面配置

    16、nginx 错误页面配置nginx错误页面包括404 403 500 502 503 504等页面,只需要在server中增加以下配置即可: error_page404 403
    发表于 07-26 06:54

    主要学习下nginx安装配置

    主要学习下nginx安装配置,以便于后续学习。以下在本地虚拟机上搭建学习。1、检查系统网络是否能连通公网:ping www.taobao.com2、确认yum源是否配置好,用于下载安装
    发表于 10-19 14:12

    介绍 Nginx的基本概念,性能,SSL 安装

    我们会告诉你 Nginx 如何工作及其背后的理念,还有如何优化以加快应用的性能,如何安装启动和保持运行。
    的头像 发表于 02-08 09:12 3948次阅读
    介绍 <b class='flag-5'>Nginx</b>的基本概念,性能,SSL <b class='flag-5'>安装</b>

    运行nginx所需的最低配置

    运行nginx所需的最低配置: # /etc/nginx/nginx.confevents {} # event context have to be defined to consi
    的头像 发表于 08-23 10:53 6065次阅读

    Nginx常用的配置和基本功能讲解

    Nginx 已经广泛应用于 J-one 和 Jdos 的环境部署上,本文对 Nginx 的常用的配置和基本功能进行讲解,适合 Nginx 入门学习。
    的头像 发表于 05-04 10:25 1535次阅读

    搭建Keepalived+Lvs+Nginx高可用集群负载均衡

      一、Nginx安装 二、配置反向代理 三、配置负载均衡 四、upstream指令参数 五、配置ssl证书提供https访问 六、
    的头像 发表于 06-25 15:39 4409次阅读
    搭建Keepalived+Lvs+<b class='flag-5'>Nginx</b>高可用集群负载均衡

    nginx负载均衡配置介绍

    代理 安装Keepalived 配置Keepalived 编写脚本监控Keepalived和nginx的状态 配置keepalived加入监控脚本的
    的头像 发表于 11-10 13:39 1707次阅读
    <b class='flag-5'>nginx</b>负载均衡<b class='flag-5'>配置</b>介绍

    Nginx日常运维方法Linux版

    Nginx安装目录?   whereis nginx   如图: 执行目录:/usr/sbin/nginx 模块所在目录:/usr/lib64/n
    的头像 发表于 12-06 16:38 956次阅读
    <b class='flag-5'>Nginx</b>日常运维方法Linux版

    Nginx配置终极指南

    更新。性能是 Nginx 最重要的考量,其占用内存少、并发能力强、能支持高达 5w 个并发连接数,最重要的是, Nginx 是免费的并可以商业化,配置使用也比较简单。
    的头像 发表于 06-18 15:56 1177次阅读
    <b class='flag-5'>Nginx</b><b class='flag-5'>配置</b>终极指南