CentOS下Nginx服務器搭建全攻略

Nginx 安裝與配置完整指南

一、安裝 Nginx

1.1 添加 Nginx 官方倉庫

在 CentOS 系統中,默認倉庫的 Nginx 版本可能較舊(通常為 1.12 或更早版本),建議添加官方倉庫來安裝最新穩定版本(目前為 1.25.x):

sudo tee /etc/yum.repos.d/nginx.repo <<EOF
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=0
enabled=1
EOF

此命令會創建 /etc/yum.repos.d/nginx.repo 文件,配置 Nginx 官方 YUM 倉庫。其中:

  • baseurl 會根據 CentOS 版本自動匹配(例如 CentOS 7 對應 7/$basearch/,CentOS 8 對應 8/$basearch/)
  • gpgcheck=0 表示不進行 GPG 驗證(生產環境建議設為1并導入密鑰:sudo rpm --import http://nginx.org/keys/nginx_signing.key
  • enabled=1 表示啟用該倉庫

1.2 安裝 Nginx 軟件包

sudo yum install -y nginx

安裝完成后,系統會自動創建以下重要文件和目錄:

  • 主程序/usr/sbin/nginx
  • 配置文件目錄/etc/nginx/
    • 主配置文件:nginx.conf
    • 虛擬主機配置目錄:conf.d/
    • 模塊配置目錄:modules-available/
  • 默認網站目錄/usr/share/nginx/html
  • 日志目錄/var/log/nginx/
    • 訪問日志:access.log
    • 錯誤日志:error.log
  • 系統服務單元/usr/lib/systemd/system/nginx.service

1.3 啟動服務并設置開機自啟

# 啟動Nginx服務
sudo systemctl start nginx# 設置開機自動啟動
sudo systemctl enable nginx

驗證服務狀態:

sudo systemctl status nginx

正常輸出應顯示"active (running)"狀態。常見狀態說明:

  • active (running):服務正常運行
  • failed:啟動失敗(需檢查日志)
  • inactive (dead):服務已停止

二、防火墻配置

2.1 開放基礎端口

# 永久開放HTTP(80)和HTTPS(443)服務
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https# 重新加載防火墻規則
sudo firewall-cmd --reload

對于云服務器(如AWS、阿里云等),還需在安全組中開放80和443端口:

  1. 登錄云平臺控制臺
  2. 找到對應實例的安全組配置
  3. 添加入站規則:TCP 80和443,源地址0.0.0.0/0

2.2 可選端口管理

查看已開放端口和服務:

sudo firewall-cmd --list-all

輸出示例:

public (active)target: defaulticmp-block-inversion: nointerfaces: eth0sources: services: dhcpv6-client http https sshports: protocols: masquerade: noforward-ports: source-ports: icmp-blocks: rich rules: 

臨時開放特定端口(測試用,重啟后失效):

sudo firewall-cmd --add-port=8080/tcp

永久開放端口:

sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload

三、驗證安裝

訪問服務器公網 IP(如 http://你的服務器IP),應看到 Nginx 默認歡迎頁(顯示"Welcome to nginx!")。

若無法訪問,檢查步驟:

  1. 檢查防火墻設置
    sudo firewall-cmd --list-all
    

  2. 確認服務器網絡配置
    curl -I localhost  # 本地測試
    ping 你的服務器IP  # 檢查網絡連通性
    

  3. 查看 Nginx 錯誤日志
    sudo tail -f /var/log/nginx/error.log
    

  4. 檢查端口監聽狀態
    sudo netstat -tulnp | grep nginx
    

    正常應顯示:
    tcp   0   0 0.0.0.0:80    0.0.0.0:*    LISTEN   1234/nginx: master
    

四、配置文件結構

4.1 主要配置文件

  • 主配置文件/etc/nginx/nginx.conf
    • 包含全局設置、events 塊和 http 塊
    • 通常通過 include 指令加載其他配置文件

典型結構示例:

user  nginx;
worker_processes  auto;error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;events {worker_connections  1024;
}http {include       /etc/nginx/mime.types;default_type  application/octet-stream;log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;sendfile        on;tcp_nopush     on;tcp_nodelay    on;keepalive_timeout  65;gzip  on;include /etc/nginx/conf.d/*.conf;
}

  • 虛擬主機配置目錄/etc/nginx/conf.d/
    • 建議每個站點單獨創建 .conf 文件
    • 文件名通常與域名一致,如 example.com.conf

4.2 重要目錄

  • 默認網站根目錄/usr/share/nginx/html

    • 存放靜態網頁文件
    • 可修改為自定義路徑
  • 日志文件

    • 訪問日志:/var/log/nginx/access.log
      • 記錄所有訪問請求
    • 錯誤日志:/var/log/nginx/error.log
      • 記錄Nginx運行錯誤和警告
  • PID 文件/run/nginx.pid

    • 存儲Nginx主進程的進程ID
    • 用于服務管理和進程控制

五、虛擬主機配置示例

5.1 創建站點配置文件

/etc/nginx/conf.d/example.com.conf 示例:

server {listen 80;server_name example.com www.example.com;# 網站根目錄設置root /var/www/example.com;index index.html index.htm;# 日志配置access_log /var/log/nginx/example.com.access.log main;error_log /var/log/nginx/example.com.error.log warn;# 默認請求處理location / {try_files $uri $uri/ =404;}# 靜態文件緩存設置location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {expires 30d;add_header Cache-Control "public, no-transform";}# 禁止訪問隱藏文件location ~ /\. {deny all;}# 自定義錯誤頁面error_page 404 /404.html;error_page 500 502 503 504 /50x.html;
}

5.2 創建網站目錄并設置權限

# 創建網站目錄
sudo mkdir -p /var/www/example.com# 設置目錄所有權(Nginx運行用戶通常為nginx)
sudo chown -R nginx:nginx /var/www/example.com# 設置目錄權限
sudo chmod -R 755 /var/www/example.com# 創建測試頁面
echo "<!DOCTYPE html>
<html>
<head><title>Welcome to example.com</title>
</head>
<body><h1>Welcome to example.com</h1><p>This is a test page for Nginx configuration.</p>
</body>
</html>" | sudo tee /var/www/example.com/index.html# 創建錯誤頁面
echo "<h1>404 Not Found</h1>" | sudo tee /var/www/example.com/404.html
echo "<h1>50x Server Error</h1>" | sudo tee /var/www/example.com/50x.html

5.3 測試并重載配置

# 測試配置語法是否正確
sudo nginx -t# 如果測試通過,平滑重載配置(不影響現有連接)
sudo systemctl reload nginx# 或者完全重啟服務(會中斷現有連接)
sudo systemctl restart nginx

配置測試成功輸出:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

六、常見問題解決方案

6.1 Nginx 啟動失敗

檢查步驟:

  1. 查看錯誤信息

    sudo journalctl -xe
    sudo tail -f /var/log/nginx/error.log
    

  2. 端口沖突檢查

    sudo netstat -tulnp | grep :80
    

    如果其他服務(如Apache)占用了80端口,需要先停止它們:

    sudo systemctl stop httpd
    sudo systemctl disable httpd
    

  3. 配置文件測試

    sudo nginx -t
    

  4. 檢查SELinux狀態

    getenforce
    

6.2 SELinux 相關問題

臨時解決方案(不推薦生產環境):

sudo setenforce 0

永久解決方案(需重啟生效):

sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

更安全的做法是配置正確的SELinux上下文:

# 為網站目錄設置httpd上下文
sudo chcon -R -t httpd_sys_content_t /var/www/example.com# 允許Nginx訪問網絡
sudo setsebool -P httpd_can_network_connect 1

七、性能優化建議

7.1 進程配置優化

/etc/nginx/nginx.conf 示例:

worker_processes auto;  # 自動匹配CPU核心數
worker_rlimit_nofile 65535;  # 提高worker進程能打開的文件描述符數量events {worker_connections 4096;  # 每個worker的最大連接數use epoll;  # 高效事件模型(Linux專用)multi_accept on;  # 一次接受多個連接
}

調整系統限制:

# 編輯/etc/security/limits.conf
echo "nginx soft nofile 65535" | sudo tee -a /etc/security/limits.conf
echo "nginx hard nofile 65535" | sudo tee -a /etc/security/limits.conf

7.2 連接優化

http {keepalive_timeout 65;  # 保持連接的超時時間keepalive_requests 100;  # 單個連接的最大請求數sendfile on;  # 啟用高效文件傳輸tcp_nopush on;  # 優化數據包發送tcp_nodelay on;  # 禁用Nagle算法client_body_buffer_size 10K;client_header_buffer_size 1k;client_max_body_size 8m;large_client_header_buffers 2 1k;
}

7.3 壓縮配置

gzip on;
gzip_min_length 1k;  # 最小壓縮文件大小
gzip_comp_level 6;  # 壓縮級別(1-9)
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_vary on;  # 根據客戶端支持情況決定是否壓縮
gzip_disable "MSIE [1-6]\.";  # 對舊版IE禁用壓縮
gzip_proxied any;  # 對所有代理請求啟用壓縮

7.4 緩存優化

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m use_temp_path=off;server {location / {proxy_cache my_cache;proxy_cache_key "$scheme$request_method$host$request_uri";proxy_cache_valid 200 304 12h;proxy_cache_valid any 10m;add_header X-Proxy-Cache $upstream_cache_status;}
}

創建緩存目錄并設置權限:

sudo mkdir -p /var/cache/nginx
sudo chown nginx:nginx /var/cache/nginx

八、HTTPS 配置建議

8.1 使用 Certbot 自動配置

安裝 Certbot(Let's Encrypt客戶端):

sudo yum install -y epel-release
sudo yum install -y certbot python3-certbot-nginx

申請證書(自動配置Nginx):

sudo certbot --nginx -d example.com -d www.example.com

按照提示操作后,Certbot會:

  1. 驗證域名所有權
  2. 獲取SSL證書
  3. 自動修改Nginx配置啟用HTTPS
  4. 設置自動續期任務

手動續期測試:

sudo certbot renew --dry-run

查看自動續期任務:

sudo systemctl list-timers | grep certbot

8.2 手動配置示例

/etc/nginx/conf.d/example.com_ssl.conf

server {listen 443 ssl http2;server_name example.com www.example.com;ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;# 安全配置ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305';ssl_prefer_server_ciphers on;ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;ssl_session_tickets off;# OCSP Staplingssl_stapling on;ssl_stapling_verify on;resolver 8.8.8.8 8.8.4.4 valid=300s;resolver_timeout 5s;# 其他站點配置...root /var/www/example.com;index index.html;location / {try_files $uri $uri/ =404;}
}# HTTP重定向到HTTPS
server {listen 80;server_name example.com www.example.com;return 301 https://$host$request_uri;
}

配置完成后測試并重載:

sudo nginx -t
sudo systemctl reload nginx

檢查SSL配置質量:

curl -I https://example.com
openssl s_client -connect example.com:443 -servername example.com | openssl x509 -noout -text

可以使用在線工具測試SSL配置:

  • SSL Labs Test
  • Mozilla SSL Config Generator

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87039.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87039.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87039.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

網絡拓撲圖繪制全流程:從架構解析到工具實戰

在數據呈現與系統管理中&#xff0c;清晰展示設備間的邏輯關系至關重要。網絡拓撲圖正是這樣一種有效的可視化工具。它通過節點設備和連接線路&#xff0c;直觀呈現網絡結構或項目流程中各元素的布局與交互關系&#xff0c;幫助理解系統運作、診斷問題并確保項目順利進行。 1. …

Git 簡介安裝教程

&#x1f4e2;歡迎點贊&#x1f44d;收藏?留言&#x1f4dd;如有錯誤敬請指正&#xff01; 目錄 一、Git 的安裝1.1 Git 的下載1.2 Git 的安裝1.2.1 使用許可聲明1.2.2 選擇安裝目錄1.2.3 選擇安裝組件1.2.4 選擇開始菜單文件夾1.2.5 選擇 Git 默認編輯器1.2.6 決定初始化新項…

鴻蒙NEXT-鴻蒙三層架構搭建,嵌入HMRouter,實現便捷跳轉,新手攻略。(2/3)

在上一小節我們已經完成了關于三層架構的搭建&#xff0c;接下來我們來實現在三層架構中的導入依賴&#xff0c;將他們相互聯系起來。 第一步&#xff1a;在features產品定制層中&#xff0c;對其中所有的動態共享包導入依賴&#xff0c;示例features>my>oh-package.jso…

【每天一個知識點】語料投毒(Corpus Poisoning)

“語料投毒”&#xff08;Corpus Poisoning&#xff09; 是指攻擊者通過向大型語言模型&#xff08;如 ChatGPT&#xff09;使用的外部知識庫中注入惡意或誤導性文檔&#xff0c;從而干擾模型的檢索與回答過程&#xff0c;導致其輸出錯誤、虛假或有害內容。 &#x1f50d; 舉個…

疏通經脈: Bridge 聯通邏輯層和渲染層

本節概述 經過前面兩節的開發&#xff0c;我們已經完成了小程序邏輯線程和 UI 線程的啟動引擎準備&#xff0c;這節開始&#xff0c;我們將完善 native bridge 層的搭建&#xff0c;構建起邏輯線程和UI線程之間的橋梁。 開始之前我們先來回顧一下邏輯引擎小節相關的流程圖: 一…

【攻防篇】解決:阿里云docker 容器中自動啟動xmrig挖礦

解決&#xff1a;阿里云服務器docker容器被植入挖礦程序 **1. 緊急處理&#xff1a;停止挖礦進程****&#xff08;1&#xff09;查找并終止 xmrig 進程****&#xff08;2&#xff09;刪除惡意文件** **2. 清理被感染的容器****&#xff08;1&#xff09;停止并刪除容器****&…

對稱非對稱加密,https和http,https通訊原理,Charles抓包原理

文章目錄 對稱加密的非對稱加密http和https原理TCP三次握手四次揮手https通訊流程&#xff1a;Charles抓包原理 對稱加密的非對稱加密 對稱加密&#xff1a;發送方的接收方式使用同一個秘鑰進行加密和解密&#xff0c;發送方將需要發送的數據&#xff0c;選擇某種加密算法&…

Kubernetes(K8s)_15_調度原理

文章目錄 Pod調度實現原理調度隊列優先隊列底層數據 調度緩存調度框架 Pod調度 Pod調度: 通過污點、容忍度和親和性影響Pod的調度 調度器實現, 其基于配置器構造(其配置來源于配置API)調度過程中任何插件返回拒絕, 都會導致Pod可能再次返回調度隊列 如: Pod調度簡略流程 調度…

moduo之tcp客戶端TcpClient

結構 #mermaid-svg-muvN6eOMXA4rCyXP {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-muvN6eOMXA4rCyXP .error-icon{fill:#552222;}#mermaid-svg-muvN6eOMXA4rCyXP .error-text{fill:#552222;stroke:#552222;}#merm…

中國科技術語雜志中國科技術語雜志社中國科技術語編輯部2025年第3期目錄

理論研究 認知術語學與社會認知術語學比較研究 吳小芳; 3-11 大語言模型背景下的術語翻譯研究&#xff1a;現狀、問題與展望 朱玉彬;王梓; 12-20 航空事件謠言敘事中的術語初探 劉成盼;劉東亮; 21-28 定名研討 淺談訓詁、訓詁學和訓詁學術語 林童; 29-35 …

自然語言處理NLP期末復習

目錄 第一章1. NLP的基本過程包括哪些-自然語言處理面臨的困難是什么2. 自然語言處理算法定義&#xff0c;過程和應用3. 結合自己的研究-描述研究中涉及的自然語言處理模型或算法&#xff0c;模型或算法原理&#xff0c;具體的處理過程4. 自然語言處理的的兩大核心任務是5. 程序…

單片機 - STM32F103“復用功能重映射”完整解析:從JTAG釋放到TIM重映射實戰詳解

本文將詳細講解 STM32F103 系列中常見的“復用功能重映射”&#xff08;Remap&#xff09;機制&#xff0c;包括 JTAG 占用、引腳默認功能與復用功能的關系&#xff0c;以及如何通過寄存器或標準庫代碼實現重映射。以 TIM3 在 PB4/PB5 上輸出 PWM 為例&#xff0c;進行實戰講解…

【C語言】知識總結·內存函數

目錄 前言&#xff1a; 一、內存復制函數 1. memcpy - 內存塊復制 2. memmove - 內存塊移動 二、內存設置函數 1. memset - 內存塊填充 三、內存比較函數 1. memcmp 2.memchr 三內存分配函數 1 .malloc 2.free 總結&#xff1a; 注意事項&#xff1a; 前言&…

python+uniapp基于微信小程序面向品牌會員的在線商城系統

文章目錄 具體實現截圖本項目支持的技術路線源碼獲取詳細視頻演示&#xff1a;文章底部獲取博主聯系方式&#xff01;&#xff01;&#xff01;&#xff01;本系統開發思路進度安排及各階段主要任務java類核心代碼部分展示主要參考文獻&#xff1a;源碼獲取/詳細視頻演示 ##項目…

小魚fish系統 sudo apt update報錯(密鑰失效)

在使用小魚fish提供的系統鏡像文件&#xff0c;sudo apt update系統更新時遇到了以下報錯&#xff0c;即ROS 2 倉庫的 GPG 密鑰已過期&#xff0c;以及 Docker 倉庫使用了過時的密鑰存儲方式 fishrosfishros-linux:~$ sudo apt update 獲取:1 http://mirrors.tuna.tsinghua.ed…

深度優先搜索 (DFS) 詳解

1. 什么是深度優先搜索&#xff1f; 深度優先搜索&#xff08;Depth-First Search, DFS&#xff09;是一種用于遍歷或搜索樹或圖的算法。這個算法會盡可能深地搜索樹的分支。當節點v的所在邊都已被探尋過&#xff0c;搜索將回溯到發現節點v的那條邊的起始節點。這一過程一直進…

文心4.5開源大模型的使用和部署

前言 就在今天&#xff0c;文心4.5模型開源了&#xff0c;不是一個&#xff0c;而是整個系列模型正式開源。很突然&#xff0c;我都震驚了。文心4.5系列開源模型共10款&#xff0c;涵蓋了激活參數規模分別為47B 和3B 的混合專家&#xff08;MoE&#xff09;模型&#xff08;最…

HarmonyOs開發之——TypeScript介紹、入門,及 TypeScript、JavaScript、ArkTs的具體區別解讀。

HarmonyOs開發之——TypeScript介紹、入門&#xff0c;及 TypeScript、JavaScript、ArkTs的具體區別解讀。 一、 開發語言介紹&#xff1a; TypeScript是JavaScript的超集&#xff0c;ArkTS則是TypeScript的超集。ArkTs是 HarmonyOs的主力開發語言&#xff0c;它在TypeScript…

《JMS事務性會話徹底解析:消息監聽中的 commit、rollback 和冪等設計》

大家好&#xff0c;我是G探險者&#xff01; &#x1f4cc; 場景引入 在實際項目中&#xff0c;我們常常面臨以下挑戰&#xff1a; 監聽 MQ 消息失敗了&#xff0c;希望自動重試&#xff1f;消費 MQ 消息后&#xff0c;要寫數據庫&#xff0c;但中間報錯了&#xff1f;消息處…

vue3 el-table 列增加 自定義排序邏輯

在 Vue 3 中使用 Element Plus 的 <el-table> 組件時&#xff0c;如果你想增加自定義排序邏輯&#xff0c;可以通過以下幾個步驟實現&#xff1a; 1. 使用 default-sort 屬性 首先&#xff0c;你可以在 <el-table> 組件上使用 default-sort 屬性來指定默認的排序…