女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

    文章

    1284

    瀏覽量

    70896
  • 服務器
    +關注

    關注

    13

    文章

    9717

    瀏覽量

    87376
  • nginx
    +關注

    關注

    0

    文章

    164

    瀏覽量

    12509

原文標題: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

    Linux下Nginx的常用命令------啟動、停止、重啟

    啟動代碼格式:nginx安裝目錄地址 -c nginx配置文件地址例如:[root@LinuxServer ***in]# /usr/local/n
    發表于 07-09 07:02

    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 ?3445次閱讀
    介紹 <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 ?5683次閱讀

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

    Nginx 已經廣泛應用于 J-one 和 Jdos 的環境部署上,本文對 Nginx 的常用的配置和基本功能進行講解,適合 Nginx 入門學習。
    的頭像 發表于 05-04 10:25 ?887次閱讀

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

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

    nginx負載均衡配置介紹

    代理 安裝Keepalived 配置Keepalived 編寫腳本監控Keepalived和nginx的狀態 配置keepalived加入監控腳本的
    的頭像 發表于 11-10 13:39 ?665次閱讀
    <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 ?422次閱讀
    <b class='flag-5'>Nginx</b>日常運維方法Linux版