一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Nginx基礎(chǔ)安裝與配置教程

馬哥Linux運維 ? 來源:CSDN技術(shù)社區(qū) ? 2025-06-13 16:13 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Nginx網(wǎng)站服務(wù):從入門到LNMP架構(gòu)實戰(zhàn)

前言

說起Web服務(wù)器,大家第一反應(yīng)可能是Apache,但作為一個在運維路上摸爬滾打的技術(shù)人,我必須要為Nginx正名一下!這個由俄羅斯大神Igor Sysoev開發(fā)的輕量級HTTP服務(wù)器,真的是我見過最"能打"的Web服務(wù)器之一。

為什么這么說?單臺服務(wù)器能扛30000-50000個并發(fā)連接,內(nèi)存消耗還特別低,這性能簡直逆天!今天就來分享一下我在實際項目中使用Nginx的經(jīng)驗,從基礎(chǔ)安裝到LNMP架構(gòu)搭建,希望能幫到正在學(xué)習(xí)的小伙伴們。

一、Nginx基礎(chǔ)安裝與配置

Nginx vs Apache 性能對比圖

┌─────────────────────────────────────────────────────────────────────┐
│          Nginx vs Apache 性能對比             │
├─────────────────────────────────────────────────────────────────────┤
│                                   │
│  Nginx              Apache            │
│ ┌─────────────────────┐     ┌─────────────────────┐      │
│ │  并發(fā): 30K-50K   │     │  并發(fā): 1K-5K    │      │
│ │  內(nèi)存: 低     │     │  內(nèi)存: 較高    │      │
│ │  CPU: 低      │     │  CPU: 較高     │      │
│ │  模式: 異步事件   │     │  模式: 進程/線程  │      │
│ │  靜態(tài)文件: 優(yōu)秀   │     │  靜態(tài)文件: 良好  │      │
│ │  配置: 簡潔    │     │  配置: 功能豐富  │      │
│ │  負載均衡: 內(nèi)置   │     │  負載均衡: 需模塊 │      │
│ │  反向代理: 高效   │     │  動態(tài)內(nèi)容: 強大  │      │
│ └─────────────────────┘     └─────────────────────┘      │
│                                   │
└─────────────────────────────────────────────────────────────────────┘

1.1 編譯安裝Nginx

首先我們需要準(zhǔn)備編譯環(huán)境,這一步很關(guān)鍵:

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

為什么要安裝這些包?

?pcre-devel:支持正則表達式

?zlib-devel:支持gzip壓縮

?gcc++/gcc:編譯器

接下來創(chuàng)建專用用戶(安全第一):

# 創(chuàng)建nginx用戶,不允許登錄shell
[root@localhost ~]# useradd -M -s /sbin/nologin nginx

Nginx 安裝流程圖

┌─────────────────────────────────────────────────────────────┐
│         Nginx 安裝配置流程             │
├─────────────────────────────────────────────────────────────┤
│                               │
│ ┌─────────────────┐                    │
│ │ 1. 安裝依賴包  │ ← pcre-devel zlib-devel gcc      │
│ └─────────────────┘                    │
│      ↓                         │
│ ┌─────────────────┐                    │
│ │ 2. 創(chuàng)建運行用戶 │ ← useradd -M -s /sbin/nologin nginx  │
│ └─────────────────┘                    │
│      ↓                         │
│ ┌─────────────────┐                    │
│ │ 3. 編譯安裝   │ ← ./configure && make && make install │
│ └─────────────────┘                    │
│      ↓                         │
│ ┌─────────────────┐                    │
│ │ 4. 創(chuàng)建服務(wù)腳本 │ ← /etc/init.d/nginx          │
│ └─────────────────┘                    │
│      ↓                         │
│ ┌─────────────────┐                    │
│ │ 5. 啟動測試   │ ← systemctl start nginx       │
│ └─────────────────┘                    │
│                               │
│ 關(guān)鍵配置參數(shù):                       │
│ --prefix=/usr/local/nginx                 │
│ --user=nginx                        │
│ --group=nginx                       │
│ --with-http_stub_status_module               │
│                               │
└─────────────────────────────────────────────────────────────┘

1.2 編譯配置

這里是關(guān)鍵步驟,配置參數(shù)要仔細:

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

# 配置編譯參數(shù)
[root@localhost nginx-1.12.0]# ./configure 
  --prefix=/usr/local/nginx      # 安裝目錄
  --user=nginx            # 運行用戶
  --group=nginx            # 運行組
  --with-http_stub_status_module   # 狀態(tài)統(tǒng)計模塊

# 編譯安裝
[root@localhost nginx-1.12.0]# make && make install

小技巧:創(chuàng)建軟鏈接方便使用

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

1.3Nginx配置文件結(jié)構(gòu)

┌─────────────────────────────────────────────────────────────┐
│          Nginx 配置文件結(jié)構(gòu)            │
├─────────────────────────────────────────────────────────────┤
│                               │
│ ┌─────────────────────────────────────────────────────┐  │
│ │ 全局配置 (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;                │ │  │
│ │ │   ┌─────────────────────────────────────────┐ │ │  │
│ │ │   │ 服務(wù)器配置 (Server)           │ │ │  │
│ │ │   │ ┌─────────────────────────────────────┐ │ │ │  │
│ │ │   │ │ server {              │ │ │ │  │
│ │ │   │ │   listen 80;           │ │ │ │  │
│ │ │   │ │   server_name www.example.com;  │ │ │ │  │
│ │ │   │ │   ┌─────────────────────────────┐ │ │ │ │  │
│ │ │   │ │   │ 位置配置 (Location)     │ │ │ │ │  │
│ │ │   │ │   │ location / {        │ │ │ │ │  │
│ │ │   │ │   │   root html;        │ │ │ │ │  │
│ │ │   │ │   │   index index.html;    │ │ │ │ │  │
│ │ │   │ │   │ }              │ │ │ │ │  │
│ │ │   │ │   └─────────────────────────────┘ │ │ │ │  │
│ │ │   │ │ }                  │ │ │ │  │
│ │ │   │ └─────────────────────────────────────┘ │ │ │  │
│ │ │   └─────────────────────────────────────────┘ │ │  │
│ │ │ }                        │ │  │
│ │ └─────────────────────────────────────────────────┘ │  │
│ └─────────────────────────────────────────────────────┘  │
│                               │
└─────────────────────────────────────────────────────────────┘

核心配置示例

# 全局配置
user nginx;          # 運行用戶
worker_processes 1;      # 工作進程數(shù)(建議=CPU核數(shù))
error_log logs/error.log;   # 錯誤日志

# 事件配置
events {
  use epoll;        # 使用epoll模型(Linux推薦)
  worker_connections 4096; # 每個進程最大連接數(shù)
}

# 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 系統(tǒng)服務(wù)腳本

為了方便管理,我們創(chuàng)建一個系統(tǒng)服務(wù)腳本:

[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)  # 重載配置,不中斷服務(wù)
  ;;
*)
 echo"Usage:$0{start|stop|restart|reload}"
 exit1
esac
exit0
# 添加執(zhí)行權(quán)限并注冊服務(wù)
[root@localhost ~]#chmod+x /etc/init.d/nginx
[root@localhost ~]# chkconfig --add nginx
[root@localhost ~]# systemctl start nginx

二、Nginx訪問控制

2.1 基于用戶認(rèn)證的訪問控制

訪問控制流程圖

┌─────────────────────────────────────────────────────────────┐
│          Nginx 訪問控制機制            │
├─────────────────────────────────────────────────────────────┤
│                               │
│ ┌─────────┐   ┌─────────┐   ┌─────────┐        │
│ │ 用戶請求 │────→│ Nginx │────→│ 認(rèn)證檢查 │        │
│ │ Request │   │ Server │   │ Auth? │        │
│ └─────────┘   └─────────┘   └─────────┘        │
│                    │           │
│             ┌────────────┼────────────┐    │
│             ▼      │      ▼    │
│          ┌─────────────┐   │   ┌─────────────┐ │
│          │ 401 未授權(quán)  │   │   │ 200 成功  │ │
│          │ 要求認(rèn)證   │   │   │ 返回內(nèi)容  │ │
│          └─────────────┘   │   └─────────────┘ │
│             ▲      │      ▲    │
│             │      │      │    │
│           認(rèn)證失敗   認(rèn)證成功         │
│                               │
│ 配置示例:                         │
│ auth_basic "管理員區(qū)域";                  │
│ auth_basic_user_file /path/to/passwd;           │
│                               │
└─────────────────────────────────────────────────────────────┘

有時候我們需要對某些目錄進行保護,這時候用戶認(rèn)證就派上用場了:

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

# 創(chuàng)建用戶密碼文件
[root@localhost ~]# htpasswd -c /usr/local/nginx/passwd.db admin
New password:
Re-typenew password:
Adding passwordforuser admin

設(shè)置文件權(quán)限(重要):

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

配置nginx.conf

server {
  location /admin {
    auth_basic"管理員區(qū)域";          # 認(rèn)證提示信息
    auth_basic_user_file /usr/local/nginx/passwd.db; # 密碼文件路徑
    root html;
    index index.html;
  }
}

2.2 基于IP的訪問控制

這個功能在實際項目中超級實用,比如只允許辦公網(wǎng)IP訪問后臺:

server {
  location /admin {
    deny 192.168.1.100;   # 拒絕特定IP
    allow 192.168.1.0/24;  # 允許整個網(wǎng)段
    allow 10.0.0.0/8;    # 允許內(nèi)網(wǎng)
    deny all;        # 拒絕其他所有IP
  }
}

規(guī)則執(zhí)行順序:從上到下,匹配到就停止!

三、虛擬主機配置

一臺服務(wù)器跑多個網(wǎng)站?沒問題!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     │   │
│ │        │ │        │ │        │   │
│ │優(yōu)點:最常用   │ │優(yōu)點:完全隔離  │ │優(yōu)點:簡單易配  │   │
│ │缺點:需要域名  │ │缺點:需要多IP  │ │缺點:端口管理  │   │
│ └─────────────────┘ └─────────────────┘ └─────────────────┘   │
│                                   │
└─────────────────────────────────────────────────────────────────────┘

3.1 基于域名的虛擬主機

這是最常用的方式,一個IP綁定多個域名:

# 準(zhǔn)備網(wǎng)站目錄
[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配置

# 網(wǎng)站1
server {
  listen    80;
  server_name www.site1.com;
  access_log  logs/site1.access.log;
 
  location / {
    root  /var/www/html/site1;
    index index.html;
  }
}

# 網(wǎng)站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 基于端口的虛擬主機

當(dāng)域名不夠用時,可以用不同端口:

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架構(gòu)搭建

重頭戲來了!LNMP(Linux + Nginx + MySQL + PHP)是我最喜歡的Web架構(gòu)組合。

LNMP架構(gòu)圖

┌─────────────────────────────────────────────────────────────────────┐
│            LNMP 架構(gòu)圖                  │
├─────────────────────────────────────────────────────────────────────┤
│                                   │
│            ┌─────────────┐               │
│            │  用戶請求  │               │
│            │ HTTP Request│               │
│            └──────┬──────┘               │
│                │                   │
│                ▼                   │
│ ┌─────────────────────────────────────────────────────────────┐  │
│ │           Nginx                 │  │
│ │         (Web服務(wù)器/反向代理)             │  │
│ │ ┌─────────────────┐       ┌─────────────────┐    │  │
│ │ │  靜態(tài)文件    │       │  PHP請求    │    │  │
│ │ │  直接返回    │       │  轉(zhuǎn)發(fā)給FPM   │    │  │
│ │ │ .css .js .png  │       │  .php文件   │    │  │
│ │ └─────────────────┘       └─────────────────┘    │  │
│ └─────────────────────────────────┬───────────────────────────┘  │
│                  │                │
│                  ▼                │
│ ┌─────────────────────────────────────────────────────────────┐  │
│ │          PHP-FPM                 │  │
│ │        (PHP進程管理器)                │  │
│ │      處理PHP腳本,連接數(shù)據(jù)庫              │  │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐      │  │
│ │ │ Worker1 │ │ Worker2 │ │ Worker3 │ │ Worker4 │      │  │
│ │ │ Process │ │ Process │ │ Process │ │ Process │      │  │
│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘      │  │
│ └─────────────────────────┬───────────────────────────────────┘  │
│              │                    │
│              ▼                    │
│ ┌─────────────────────────────────────────────────────────────┐  │
│ │           MySQL                  │  │
│ │         (數(shù)據(jù)庫服務(wù)器)                │  │
│ │        存儲和管理數(shù)據(jù)                 │  │
│ │ ┌─────────────────────────────────────────────────────┐  │  │
│ │ │ 數(shù)據(jù)庫表: 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

初始化數(shù)據(jù)庫

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

# 初始化數(shù)據(jù)庫
[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是關(guān)鍵組件,負責(zé)處理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           # 關(guān)鍵:啟用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

關(guān)鍵配置項

# php-fpm.conf
pid = run/php-fpm.pid
user = php
group = php
pm.max_children = 50    # 最大子進程數(shù)
pm.start_servers = 20   # 啟動時進程數(shù)
pm.min_spare_servers = 5  # 最小空閑進程
pm.max_spare_servers = 35 # 最大空閑進程

4.3 Nginx與PHP集成

這是LNMP架構(gòu)的核心配置:

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監(jiān)聽端口
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include    fastcgi_params;
  }
 
 # 靜態(tài)文件處理
  location ~ .(css|js|png|jpg|gif|ico|svg)$ {
    expires 1y;
    add_header Cache-Control"public, immutable";
  }
}

4.4 測試LNMP環(huán)境

創(chuàng)建PHP測試文件:

[root@localhost ~]#mkdir/var/www/html
[root@localhost ~]# vim /var/www/html/test.php
 LNMP環(huán)境測試頁面";
echo"
"; // PHP版本信息 echo"

PHP信息

"; echo"

PHP版本:".phpversion() ."

"; echo"

服務(wù)器時間:".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"
"; // 服務(wù)器信息 echo"

服務(wù)器信息

"; echo"

操作系統(tǒng)".php_uname() ."

"; echo"

Web服務(wù)器:".$_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服務(wù)啟動腳本

#!/bin/bash
# LNMP一鍵啟動腳本

echo" 啟動LNMP服務(wù)..."

# 啟動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服務(wù)啟動完成!"
echo" 服務(wù)狀態(tài)檢查:"
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 ' 未運行')"

五、性能優(yōu)化技巧

5.1 Nginx狀態(tài)監(jiān)控

啟用狀態(tài)統(tǒng)計模塊,實時監(jiān)控服務(wù)器狀態(tài):

location /nginx-status {
  stub_status on;
  access_log off;
  allow 127.0.0.1;    # 只允許本機訪問
  allow 192.168.1.0/24; # 允許內(nèi)網(wǎng)訪問
  deny all;
}

訪問/nginx-status可以看到:

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


AI寫代碼

狀態(tài)說明

?Active connections: 當(dāng)前活躍連接數(shù)

?accepts: 已接受的連接數(shù)

?handled: 已處理的連接數(shù)

?requests: 總請求數(shù)

?Reading: 正在讀取請求頭的連接數(shù)

?Writing: 正在向客戶端寫響應(yīng)的連接數(shù)

?Waiting: 空閑客戶端連接數(shù)

5.2 性能調(diào)優(yōu)參數(shù)

# 全局優(yōu)化
user nginx;
worker_processes auto;     # 自動檢測CPU核數(shù)
worker_cpu_affinity auto;   # CPU親和性綁定
worker_rlimit_nofile 65535;  # 工作進程最大文件描述符

# 事件優(yōu)化
events {
  use epoll;         # Linux下使用epoll
  worker_connections 65535; # 每個進程最大連接數(shù)
  multi_accept on;      # 一次接受多個連接
  accept_mutex off;     # 關(guān)閉accept鎖
}

http {
 # 基礎(chǔ)優(yōu)化
  sendfile on;        # 開啟高效文件傳輸
  tcp_nopush on;       # 優(yōu)化網(wǎng)絡(luò)包傳輸
  tcp_nodelay on;      # 減少網(wǎng)絡(luò)延遲
  keepalive_timeout 30;   # 連接保持時間
  keepalive_requests 1000;  # 每個連接最大請求數(shù)
 
 # 緩存優(yōu)化
  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;
 
 # 緩沖區(qū)優(yōu)化
  client_body_buffer_size 128k;
  client_header_buffer_size 32k;
  large_client_header_buffers 4 32k;
  client_max_body_size 50m;
}

5.3 系統(tǒng)內(nèi)核優(yōu)化

# /etc/sysctl.conf 系統(tǒng)內(nèi)核優(yōu)化

# 網(wǎng)絡(luò)優(yōu)化
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

# 文件描述符優(yōu)化
fs.file-max = 6815744

# 應(yīng)用生效
sysctl -p

5.4 PHP-FPM性能優(yōu)化

# php-fpm.conf 優(yōu)化配置

[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

# 進程管理優(yōu)化
pm = dynamic          # 動態(tài)進程管理
pm.max_children = 100     # 最大子進程數(shù)
pm.start_servers = 20     # 啟動時進程數(shù)
pm.min_spare_servers = 10   # 最小空閑進程
pm.max_spare_servers = 30   # 最大空閑進程
pm.max_requests = 1000     # 每個進程最大請求數(shù)

# 慢日志
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優(yōu)化
  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;
}

七、監(jiān)控與日志

7.1 日志格式優(yōu)化

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 日志輪轉(zhuǎn)

# /etc/logrotate.d/nginx
/usr/local/nginx/logs/*.log{
  daily          # 每天輪轉(zhuǎn)
  missingok       # 文件不存在不報錯
  rotate 30       # 保留30天
  compress        # 壓縮舊日志
  delaycompress     # 延遲壓縮
  notifempty       # 空文件不輪轉(zhuǎn)
  create 644 nginx nginx # 創(chuàng)建新文件權(quán)限
  postrotate
    /bin/kill -USR1 $(cat/usr/local/nginx/logs/nginx.pid 2>/dev/null) 2>/dev/null || :
  endscript
}

總結(jié)

通過這次完整的實戰(zhàn)分享,我們從零開始搭建了一個完整的LNMP環(huán)境,涵蓋了:

核心知識點

1.Nginx基礎(chǔ)安裝

? 編譯安裝與配置

? 服務(wù)腳本創(chuàng)建

? 配置文件結(jié)構(gòu)理解

2.訪問控制

? 基于用戶認(rèn)證

? 基于IP地址控制

? 安全策略配置

3.虛擬主機

? 基于域名的虛擬主機

? 基于端口的虛擬主機

? 多站點管理

4.LNMP架構(gòu)

? MySQL數(shù)據(jù)庫安裝

? PHP-FPM配置優(yōu)化

? Nginx與PHP集成

5.性能優(yōu)化

? 內(nèi)核參數(shù)調(diào)優(yōu)

? Nginx配置優(yōu)化

? 緩存策略配置

6.安全加固

? 版本信息隱藏

? 惡意請求防護

? SSL/TLS配置

實戰(zhàn)經(jīng)驗分享

┌─────────────────────────────────────────────────────────────┐
│          Nginx實戰(zhàn)經(jīng)驗總結(jié)             │
├─────────────────────────────────────────────────────────────┤
│                               │
│  關(guān)鍵要點:                        │
│ ┌─────────────────────────────────────────────────────┐  │
│ │ 1. 安全第一:專用用戶 + 權(quán)限控制           │  │
│ │ 2. 性能優(yōu)化:合理配置進程數(shù)和連接數(shù)          │  │
│ │ 3. 監(jiān)控重要:日志分析 + 狀態(tài)監(jiān)控           │  │
│ │ 4. 架構(gòu)清晰:理解各組件協(xié)作關(guān)系            │  │
│ │ 5. 持續(xù)學(xué)習(xí):跟進新版本和最佳實踐           │  │
│ └─────────────────────────────────────────────────────┘  │
│                               │
│  生產(chǎn)環(huán)境建議:                      │
│ ? worker_processes = CPU核數(shù)                │
│ ? worker_connections = 10240-65535            │
│ ? 開啟gzip壓縮節(jié)省帶寬                   │
│ ? 配置SSL證書提升安全性                   │
│ ? 定期備份配置文件                     │
│ ? 監(jiān)控服務(wù)器資源使用情況                  │
│                               │
└─────────────────────────────────────────────────────────────┘

常用命令速查

# Nginx服務(wù)管理
nginx -t          # 檢查配置文件語法
nginx -s reload      # 重載配置(不中斷服務(wù))
nginx -s stop       # 停止服務(wù)
nginx -s quit       # 優(yōu)雅停止
nginx -V          # 查看編譯參數(shù)

# 進程管理
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真的是一個非常優(yōu)秀的Web服務(wù)器,在高并發(fā)場景下表現(xiàn)尤其出色。掌握了這些核心技能,相信大家在實際項目中能夠游刃有余地使用Nginx,搭建出高性能、高可用的Web服務(wù)!

記住:實踐是最好的老師,多動手操作,多在生產(chǎn)環(huán)境中驗證,才能真正掌握Nginx的精髓。

恭喜你完成了Nginx從入門到實戰(zhàn)的完整學(xué)習(xí)!繼續(xù)加油!

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Web
    Web
    +關(guān)注

    關(guān)注

    2

    文章

    1286

    瀏覽量

    71055
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    13

    文章

    9749

    瀏覽量

    87547
  • nginx
    +關(guān)注

    關(guān)注

    0

    文章

    168

    瀏覽量

    12537

原文標(biāo)題:Nginx網(wǎng)站服務(wù):從入門到LNMP架構(gòu)實戰(zhàn)

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    【NanoPi NEO試用體驗】之安裝配置Nginx環(huán)境WEB網(wǎng)站詳解

    速度。root@nrjs-cn:~# apt-get install nginx【1.3啟動NGINX服務(wù)】待NGINX安裝完成后不需要做任何配置
    發(fā)表于 10-18 12:25

    nginx中的sendfile配置說明

    nginx配置sendfile及詳細說明
    發(fā)表于 05-05 08:08

    docker中安裝nginx的詳細過程

    Centos7安裝nginx(二)之docker中安裝nginx
    發(fā)表于 10-23 17:10

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

    Docker的端口映射和nginx安裝
    發(fā)表于 04-14 11:44

    Docker端口映射和nginx安裝

    Docker的端口映射和nginx安裝
    發(fā)表于 04-17 11:44

    Centos7Nginx安裝配置步驟

    Centos7 Nginx安裝配置,防火墻開啟端口監(jiān)聽
    發(fā)表于 06-02 12:58

    nginx錯誤頁面配置

    16、nginx 錯誤頁面配置nginx錯誤頁面包括404 403 500 502 503 504等頁面,只需要在server中增加以下配置即可: error_page404 403
    發(fā)表于 07-26 06:54

    主要學(xué)習(xí)下nginx安裝配置

    主要學(xué)習(xí)下nginx安裝配置,以便于后續(xù)學(xué)習(xí)。以下在本地虛擬機上搭建學(xué)習(xí)。1、檢查系統(tǒng)網(wǎng)絡(luò)是否能連通公網(wǎng):ping www.taobao.com2、確認(rèn)yum源是否配置好,用于下載安裝
    發(fā)表于 10-19 14:12

    介紹 Nginx的基本概念,性能,SSL 安裝

    我們會告訴你 Nginx 如何工作及其背后的理念,還有如何優(yōu)化以加快應(yīng)用的性能,如何安裝啟動和保持運行。
    的頭像 發(fā)表于 02-08 09:12 ?3452次閱讀
    介紹 <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
    的頭像 發(fā)表于 08-23 10:53 ?5701次閱讀

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

    Nginx 已經(jīng)廣泛應(yīng)用于 J-one 和 Jdos 的環(huán)境部署上,本文對 Nginx 的常用的配置和基本功能進行講解,適合 Nginx 入門學(xué)習(xí)。
    的頭像 發(fā)表于 05-04 10:25 ?897次閱讀

    搭建Keepalived+Lvs+Nginx高可用集群負載均衡

    ? 一、Nginx安裝 二、配置反向代理 三、配置負載均衡 四、upstream指令參數(shù) 五、配置ssl證書提供https訪問 六、
    的頭像 發(fā)表于 06-25 15:39 ?3610次閱讀
    搭建Keepalived+Lvs+<b class='flag-5'>Nginx</b>高可用集群負載均衡

    nginx負載均衡配置介紹

    代理 安裝Keepalived 配置Keepalived 編寫腳本監(jiān)控Keepalived和nginx的狀態(tài) 配置keepalived加入監(jiān)控腳本的
    的頭像 發(fā)表于 11-10 13:39 ?689次閱讀
    <b class='flag-5'>nginx</b>負載均衡<b class='flag-5'>配置</b>介紹

    Nginx日常運維方法Linux版

    ,Nginx安裝目錄? ? whereis nginx ? 如圖: 執(zhí)行目錄:/usr/sbin/nginx 模塊所在目錄:/usr/lib64/n
    的頭像 發(fā)表于 12-06 16:38 ?441次閱讀
    <b class='flag-5'>Nginx</b>日常運維方法Linux版

    Nginx配置終極指南

    更新。性能是 Nginx 最重要的考量,其占用內(nèi)存少、并發(fā)能力強、能支持高達 5w 個并發(fā)連接數(shù),最重要的是, Nginx 是免費的并可以商業(yè)化,配置使用也比較簡單。
    的頭像 發(fā)表于 06-18 15:56 ?221次閱讀
    <b class='flag-5'>Nginx</b><b class='flag-5'>配置</b>終極指南