Nginx常用安全配置指南

Nginx是一個輕量級的,高性能的Web服務器以及反向代理和郵箱代理服務器。它運行在UNIX、GNU、linux、BSD、Mac OS X、Solaris和Windows各種版本。根據調查統計數據顯示,當前全球超過6%的網站使用Nginx Web服務器來管理Web網站應用。

為了保證基于Nginx的Web應用安全, 我結合之前在項目中遇到的相應問題進行總結和提煉,針對Nginx常用安全配置進行梳理。

一、基礎安全配置

  1. 隱藏版本信息:編輯 Nginx 源碼中的 /http/ngx_http_header_filter_module.c 文件,找到以下兩行并修改為自定義內容:

    static char ngx_http_server_string[] = “Server: Ninja Web Server” ;
    static char ngx_http_server_full_string[] = “Server: Ninja Web Server” ;
    

    然后重新編譯安裝 Nginx。

  2. 限制模塊加載:在編譯 Nginx 時,禁用不必要的模塊,例如:

    ./configure -without-http_autoindex_module -without-http_ssi_module
    make
    make install
    
  3. 限制并發連接:在 nginx.conf 文件中,使用 limit_zonelimit_conn 指令限制每個 IP 的并發連接數:

    limit_zone slimits $binary_remote_addr 5m;
    limit_conn slimits 5;
    
  4. 限制訪問域名:在 nginx.conf 文件中,添加以下配置,只允許特定域名的請求:

    if ($host !~ ^(guoyu.city|www.guoyu.city|images.guoyu.city)$ ) {return 444;
    }
    
  5. 目錄訪問限制

    • 通過 IP 地址限制訪問
      location /docs/ {deny    192.168.1.1;allow   192.168.1.0/24;deny    all;
      }
      
    • 通過密碼保護目錄
      mkdir /usr/local/nginx/conf/.htpasswd/
      htpasswd -c /usr/local/nginx/conf/.htpasswd/passwd user
      
      nginx.conf 中添加:
      location ~ /(personal-images/.|delta/.) {auth_basic  “Restricted”;auth_basic_user_file   /usr/local/nginx/conf/.htpasswd/passwd;
      }
      
  6. 防止目錄遍歷:在 nginx.conf 文件中,設置 autoindex off 來防止目錄遍歷攻擊:

    location / {autoindex off;
    }
    
  7. 過濾常見XSS攻擊: 過濾常見的 XSS 攻擊字符, XSS 攻擊常常涉及將<script>標簽或類似的特殊字符(如 <>)作為查詢參數的一部分。你可以通過正則表達式來阻止這些非法字符的訪問。

    server {listen 80;server_name your-domain.com;# 屏蔽包含 <script> 或類似的 XSS 攻擊字符的查詢字符串location / {if ($query_string ~* "<script|%3Cscript|%3E|%3C|alert|eval|javascript|<|>") {return 403;  # 返回 HTTP 403 禁止訪問}# 其他配置...}# 其他配置...
    }
    

    除了 <script>,你還可以過濾其他可能用于 XSS 攻擊的字符,比如 JavaScript 關鍵字、URL 編碼后的字符(如 %3C 為 <,%3E 為 >),甚至是嘗試使用 eval() 或 alert() 等 JavaScript 函數。

    server {listen 80;server_name your-domain.com;# 屏蔽含有危險字符或關鍵字的請求location / {if ($query_string ~* "<script|%3Cscript|%3E|%3C|alert|eval|javascript|<|>") {return 403;  # 返回 HTTP 403 禁止訪問}# 其他配置...}# 其他配置...
    }
    
  8. 設置HTTP頭: 雖然 X-XSS-Protection 響應頭在現代瀏覽器中已被棄用,但它仍然可以在一些舊版本瀏覽器中提供一定的保護。可在location規則下添加相應的配置信息。

    add_header X-XSS-Protection "1; mode=block";
    
  9. 設置 Content-Type Options: 阻止瀏覽器從執行由服務器推斷出的 MIME 類型,而非服務器聲明的內容類型。可在location規則下添加相應的配置信息。

    add_header X-Content-Type-Options nosniff;
    
  10. 限制請求大小 :通過限制請求的大小,可以減少大型惡意載荷的風險。可在location規則下添加相應的配置信息。

    # 限制請求大小為10KB
    client_max_body_size 10K;
    
  11. 實施內容安全策略(CSP): CSP 是一個額外的安全層,可以幫助檢測和減輕某些類型的攻擊,包括 XSS 和數據注入攻擊。可在location規則下添加相應的配置信息。

    add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://apis.guoyu.city";
    

二、SSL/TLS 配置

  1. 生成 SSL 證書

    cd /usr/local/nginx/conf
    openssl genrsa -des3 -out server.key 1024
    openssl req -new -key server.key -out server.csr
    cp server.key server.key.org
    openssl rsa -in server.key.org -out server.key
    openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
    
  2. 配置 SSL:在 nginx.conf 文件中,添加以下配置:

    server {server_name project.guoyu.city;listen 443;ssl on;ssl_certificate /usr/local/nginx/conf/server.crt;ssl_certificate_key /usr/local/nginx/conf/server.key;access_log /usr/local/nginx/logs/ssl.access.log;error_log /usr/local/nginx/logs/ssl.error.log;
    }
    
  3. 配置 HTTPS 重定向:在 nginx.conf 文件中,添加以下配置,將所有 HTTP 請求重定向到 HTTPS:

    server {listen 80;server_name example.com;return 301 https://$host$request_uri;
    }
    
  4. 配置 SSL 參數:在 nginx.conf 文件中,添加以下配置,提高 SSL 安全性:

    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    
  5. 使用 Let’s Encrypt 自動續期證書

    • 安裝 Certbot 和 Nginx 插件:
      sudo dnf install certbot python3-certbot-nginx -y
      
    • 使用 Certbot 申請 SSL 證書并自動配置 Nginx:
      sudo certbot --nginx -d your_domain.com -d www.your_domain.com
      
    • 配置定時任務,每天凌晨 2 點自動檢查并續期證書:
      sudo crontab -e
      0 2 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"
      

三、其他安全配置

  1. 安裝 SELinux 策略:安裝和編譯 SELinux 策略以強化 Nginx Web 服務器:

    yum -y install selinux-policy-targeted selinux-policy-devel
    cd /opt
    wget http://downloads.sourceforge.net/project/selinuxnginx/se-ngix_1_0_10.tar.gz?use_mirror=nchc&rsquo
    tar -zxvf se-ngix_1_0_10.tar.gz
    cd se-ngix_1_0_10/nginx
    make
    /usr/sbin/semodule -i nginx.pp
    
  2. 限制 Nginx 連接傳出:使用 Iptables 限制 Nginx 用戶的傳出連接:

    /sbin/iptables -A OUTPUT -o eth0 -m owner -uid-owner nginx -p tcp -dport 80 -m state -state NEW,ESTABLISHED  -j ACCEPT
    
  3. 配置操作系統保護:正確設置 /nginx 文檔根目錄的權限,確保 Nginx 以非 root 用戶運行:

    find /nginx -user nginx
    find /usr/local/nginx/html -user nginx
    ls -l /usr/local/nginx/html/
    
  4. 限制每個 IP 的連接數:在防火墻級別限制每個 IP 的連接數:

    /sbin/iptables -A INPUT -p tcp -dport 80 -i eth0 -m state -state NEW -m recent -set
    /sbin/iptables -A INPUT -p tcp -dport 80 -i eth0 -m state -state NEW -m recent -update -seconds 60  -hitcount 15 -j DROP
    service iptables save
    

通過以上的安全配置,可以大大提高 Nginx 服務器的安全性,減少網站的安全威脅。

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

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

相關文章

【UniApp 日期選擇器實現與樣式優化實踐】

UniApp 日期選擇器實現與樣式優化實踐 發布時間&#xff1a;2025/6/26 前言 在移動端應用開發中&#xff0c;日期選擇器是一個常見且重要的交互組件。本文將分享我們在 UniApp 項目中實現自定義日期選擇器的經驗&#xff0c;特別是在樣式優化過程中遇到的問題及解決方案。通過…

推薦系統的視頻特征-視頻關鍵幀特征提取與向量生成

&#x1f4cc; 總體流程概覽 視頻文件 (.mp4)↓ 關鍵幀抽取&#xff08;FFmpeg / SceneDetect&#xff09;↓ 幀圖像&#xff08;.jpg&#xff09;↓ 圖像模型提取特征&#xff08;CLIP / CNN / ViT&#xff09;↓ 多幀聚合成視頻向量&#xff08;均值池化等&#xff09;↓ 向…

Apache SeaTunnel Flink引擎執行流程源碼分析

目錄 1. 任務啟動入口 2. 任務執行命令類:FlinkTaskExecuteCommand 3. FlinkExecution的創建與初始化 3.1 核心組件初始化 3.2 關鍵對象說明 4. 任務執行:FlinkExecution.execute() 5. Source處理流程 5.1 插件初始化 5.2 數據流生成 6. Transform處理流程 6.1 插…

Vue 3 + Element Plus 實現「動態表單組件」詳解教程

? Vue 3 Element Plus 實現「動態表單組件」詳解教程 &#x1f4cc; 適用場景&#xff1a;表單字段根據配置動態生成&#xff0c;支持校驗、提交、自定義組件、復雜布局等。 &#x1f9e9; 技術棧&#xff1a;Vue 3 TypeScript Element Plus &#x1f527; 核心特性&#x…

本地部署開源時間跟蹤工具 Kimai 并實現外部訪問( Windows 版本)

Kimai 是一款開源的時間跟蹤工具&#xff0c;它易于使用&#xff0c;并提供了強大的報告功能&#xff0c;在個人和團隊記錄工作時間、項目時間和活動時間等之后可以幫助用戶了解他們是如何花費時間的&#xff0c;從而提高生產力和效率。本文將詳細介紹如何在 Windows 系統本地部…

系統分析師案例知識點

目錄 1 必做題1.1 狀態機圖1.2 活動圖1.3 統一軟件開發過程RUP 2 需求分析2.1 數據流圖DFD2.2 ER圖2.3 狀態轉換圖STD2.4 數據字典2.5 流程圖2.6 需求評審2.7 設計類2.8 FAST分析2.9 常見的關系類 3 嵌入式3.1 容器技術3.2 虛擬機技術3.3 虛擬機和容器的不同點 4 數據庫4.1 NoS…

多相機人臉掃描設備如何助力高效打造數字教育孿生體?

在教育數字化轉型浪潮中&#xff0c;數字孿生體作為現實教育場景的虛擬映射&#xff0c;正成為智慧教育發展的關鍵技術支點。傳統教育模式面臨師資資源分布不均、個性化教學難以覆蓋、跨時空教學場景受限等痛點&#xff0c;而數字孿生體通過構建高仿真虛擬教育主體&#xff08;…

用 EXCEL/WPS 實現聚類分析:賦能智能客服場景的最佳實踐

聚類分析作為無監督學習的核心技術&#xff0c;能在客服數據中發現隱藏的用戶群體或問題模式。盡管 Excel/WPS 并非專業統計軟件&#xff0c;但巧妙利用其內置功能&#xff0c;也能實現基礎的聚類分析&#xff0c;為中小型客服團隊提供快速洞察。以下介紹具體方法及智能客服場景…

基于定制開發開源AI智能名片S2B2C商城小程序源碼的H5游戲開發模式創新研究

摘要 本文以定制開發開源AI智能名片S2B2C商城小程序源碼為技術底座&#xff0c;探討其在H5游戲開發中的創新應用。通過分析原生開發與第三方工具兩種傳統開發模式的局限性&#xff0c;提出將AI智能名片的多模態內容生成能力、S2B2C商城的生態協同機制與H5游戲開發深度融合的解…

vue3+ELInput無法輸入的問題

vue3ElInput無法輸入的問題 開篇 寫業務的時候發現&#xff0c;因為想偷懶嘛&#xff0c;直接就在想在外部去定義一個變量&#xff0c;然后寫個彈窗里&#xff08;tsx&#xff09;的el-input&#xff0c;而不是又去寫個vue頁面&#xff0c;但發現就輸入不了了&#xff0c;而且…

SQL Server:如何檢測和修復 FILESTREAM 數據庫損壞?

SQL Server 中的 FILESTREAM 功能可以將二進制大型對象 &#xff08;BLOB&#xff09; 存儲到文件系統上&#xff0c;而不是將它們存儲在數據庫中。但是&#xff0c;默認情況下不啟用此功能。用戶需要使用 SQL Server Management Studio &#xff08;SSMS&#xff09; 和 SQL S…

FORCE 開發者論壇 | 火山引擎發布多款 Agent 開發工具

資料來源&#xff1a;火山引擎-開發者社區 6 月 12 日&#xff0c;2025 火山引擎 FORCE 原動力大會開發者論壇成功舉辦。大會聚焦 Agent 開發新范式&#xff0c;升級發布了 PromptPilot、MCP Servers、TRAE、扣子開發平臺等產品&#xff0c;以及多款開源項目&#xff0c;構建起…

【Qt-windows】如何使用perfmon 具體分析windows serverR2的Qt程序CPU問題

可以使用 Windows 自帶的 PerfMon&#xff08;Performance Monitor&#xff09; 工具對運行在 Windows Server R2 上的 Qt 程序進行詳細的性能分析&#xff0c;尤其是 CPU 使用情況。以下是具體的操作步驟和建議&#xff1a; 一、打開 PerfMon 工具 按下 Win R 打開運行窗口。…

【軟考高級系統架構論文】論NoSQL數據庫技術及其應用

論文真題 隨著互聯網web2.0網站的興起,傳統關系數據庫在應對web2.0 網站,特別是超大規模和高并發的web2.0純動態 SNS 網站上已經顯得力不從心,暴露了很多難以克服的問題,而非關系型的數據庫則由于其本身的特點得到了非常迅速的發展。 NoSQL(Not only SQL )的產生就是為了解…

bash的配置文件,source

一.按生效范圍分類 二.按shell登錄的方式分類 這里的執行順序存疑,因為會互相調用,不需要記憶 source執行腳本 source不創建子進程,bash創建子進程 普通腳本:用bash 配置文件腳本:用source 三.按功能分類

30道C語言高頻題整理(附答案背誦版)

1.請描述一下C語言的基本數據類型有哪些&#xff1f; C語言提供了一系列的基本數據類型&#xff0c;它們是構建更復雜數據結構的基礎。這些基本數據類型主要包括&#xff1a; 整型&#xff08;Integer Types&#xff09;&#xff1a;用于存儲整數值。根據存儲大小和符號性&…

使用Tailwind CSS和i18n的react實踐

首先在 src 下設置 i18n.js 文件 // src/i18n.js import i18n from i18next; import { initReactI18next } from react-i18next;import en from ./locales/en/public; import zh from ./locales/zh/public;i18n.use(initReactI18next) .init({resources: {en: { translation:…

生信自學路線|R語言的數據變量類型與對應運算

R 是一種動態類型語言&#xff0c;使用靈活&#xff0c;變量無需預先聲明類型。掌握 R 的數據類型和變量機制&#xff0c;是后續進行數據處理和建模分析的基礎。本章節主要介紹 R 語言中的常量、變量、基本數據類型及常用數據結構&#xff0c;并結合示例進行說明。 文章目錄 一…

UI前端大數據處理優化策略:提升數據處理速度與準確性

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩! 在數字化浪潮下&#xff0c;前端面臨的數據規模正呈指數級增長 ——IDC 預測&#xff0c;2025…

技術調研:時序數據庫(二)

除了 InfluxDB、TDengine 和 TimescaleDB&#xff0c;還有其他多個主流的開源時序數據庫&#xff0c;各自針對不同場景優化。以下是補充的時序數據庫選型清單&#xff0c;涵蓋其核心特性、適用場景及局限性&#xff1a; 1. 監控與運維場景 (1) Prometheus 核心優勢&#xff1…