在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Nginx 生產環境下的安全配置

馬哥Linux運維 ? 來源:51cto ? 2024-01-06 10:44 ? 次閱讀

Nginx簡介

Nginx 是開源、高性能、高可靠的 Web 和反向代理服務器,而且支持熱部署,幾乎可以做到 7 * 24 小時不間斷運行,即使運行幾個月也不需要重新啟動,還能在不間斷服務的情況下對軟件版本進行熱更新。性能是 Nginx 最重要的考量,其占用內存少、并發能力強、能支持高達 5w 個并發連接數,最重要的是, Nginx 是免費的并可以商業化,配置使用也比較簡單。

Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,在BSD-like 協議下發行。其特點是占有內存少,并發能力強,事實上nginx的并發能力在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。

官網對各個模塊參數配置的解釋說明網址:https://www.nginx.cn/doc/index.html

Nginx能干什么

做虛擬主機

那什么是虛擬主機呢?也就是說,這個主機是不存在的,是虛擬出來的。而我們原來所說的服務器,實際上是一臺真正的PC機。所以虛擬主機就是原本這個機器不存在,但我們可以使用軟件模擬出來,這個就叫做虛擬主機。

10092482-abc2-11ee-8b88-92fbcf53809c.jpg

反向代理

原本我們需要訪問A機器,但現在我們可以通過B機器,轉發到A機器來實現訪問,B機器就叫做代理。

10177348-abc2-11ee-8b88-92fbcf53809c.jpg

負載均衡策略

首先我們來了解一下什么叫負載,舉個例子,我們每個人背的 "東西"就是負載。而均衡則是指每個人背的東西一樣多。

在程序中,如果有多臺服務器來承載請求,那么每個服務器承載的請求個數是一樣的,這就稱為負載均衡。

輪詢策略

輪詢就是每個請求按時間順序,逐一分配到不同的后端服務器,這是默認的負載均衡策略。如果后端服務器down掉,能自動剔除。

102aedc4-abc2-11ee-8b88-92fbcf53809c.jpg

權重(weight)策略

weight代表權重,默認為 1,權重越高被分配的客戶端就越多。指定輪詢幾率,weight權重大小和訪問比率成正比,該策略常用于后端服務器性能不均衡的情況下。

1039a1ac-abc2-11ee-8b88-92fbcf53809c.jpg

IP_hash策略

ip_hash就是會對每個請求訪問的ip進行hash運算,再根據結果進行分配,這樣每個訪客固定訪問一個后端服務器。

104aa506-abc2-11ee-8b88-92fbcf53809c.jpg

Nginx基本目錄解析

1056c020-abc2-11ee-8b88-92fbcf53809c.jpg

Nginx安全配置

以上對Nginx做了基本的功能介紹,下面重點介紹一下,我們的站點部署在生產環境下,如何去做安全配置和優化。

Nginx常用命令

nginx -s reload  # 向主進程發送信號,重新加載配置文件,熱重啟
nginx -s reopen   # 重啟 Nginx
nginx -s stop    # 快速關閉
nginx -s quit    # 等待工作進程處理完成后關閉
nginx -T         # 查看當前 Nginx 最終的配置
nginx -t         # 檢查配置是否有問題

nginx.conf配置文件結構

Nginx 的典型配置示例:

# main段配置信息
user  nginx;                        # 運行用戶,默認即是nginx,可以不進行設置
worker_processes  auto;             # Nginx 進程數,一般設置為和 CPU 核數一樣
error_log  /var/log/nginx/error.log warn;   # Nginx 的錯誤日志存放目錄
pid        /var/run/nginx.pid;      # Nginx 服務啟動時的 pid 存放位置


# events段配置信息
events {
    use epoll;     # 使用epoll的I/O模型(如果你不知道Nginx該使用哪種輪詢方法,會自動選擇一個最適合你操作系統的)
    worker_connections 1024;   # 每個進程允許最大并發數
}


# http段配置信息
# 配置使用最頻繁的部分,代理、緩存、日志定義等絕大多數功能和第三方模塊的配置都在這里設置
http { 
    # 設置日志模式
    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;   # Nginx訪問日志存放位置


    sendfile            on;   # 開啟高效傳輸模式
    tcp_nopush          on;   # 減少網絡報文段的數量
    tcp_nodelay         on;
    keepalive_timeout   65;   # 保持連接的時間,也叫超時時間,單位秒
    types_hash_max_size 2048;


    include             /etc/nginx/mime.types;      # 文件擴展名與類型映射表
    default_type        application/octet-stream;   # 默認文件類型


    include /etc/nginx/conf.d/*.conf;   # 加載子配置項
    
    # server段配置信息
    server {
      listen       80;       # 配置監聽的端口
      server_name  localhost;    # 配置的域名
      
      # location段配置信息
      location / {
        root   /usr/share/nginx/html;  # 網站根目錄
        index  index.html index.htm;   # 默認首頁文件
        deny 172.168.22.11;   # 禁止訪問的ip地址,可以為all
        allow 172.168.33.44;# 允許訪問的ip地址,可以為all
      }
      
      error_page 500 502 503 504 /50x.html;  # 默認50x對應的訪問頁面
      error_page 400 404 error.html;   # 同上
    }
}

main 全局配置,對全局生效;

events 配置影響 Nginx 服務器與用戶的網絡連接;

http 配置代理,緩存,日志定義等絕大多數功能和第三方模塊的配置;

server 配置虛擬主機的相關參數,一個 http 塊中可以有多個 server 塊;

location 用于配置匹配的 uri ;

upstream 配置后端服務器具體地址,負載均衡配置不可或缺的部分;

用一張圖清晰的展示它的層級結構:

106864b0-abc2-11ee-8b88-92fbcf53809c.jpg

nginx.conf 配置文件的語法規則:

配置文件由指令與指令塊構成

每條指令以 “;” 分號結尾,指令與參數間以空格符號分隔

指令塊以 {} 大括號將多條指令組織在一起

include 語句允許組合多個配置文件以提升可維護性

通過 # 符號添加注釋,提高可讀性

通過 $ 符號使用變量

部分指令的參數支持正則表達式,例如常用的 location 指令

基礎防護設置

nginx 版本信息隱藏

server_tokens off; 

隱藏Nginx后端服務X-Powered-By頭

在http下配置proxy_hide_header項;


    增加或修改為


    proxy_hide_header X-Powered-By;


    proxy_hide_header Server;
    

proxy_buffers和client_body_buffer_size的區別

client_body_buffer_size

處理客戶端請求體buffer大小。用來處理POST提交數據,上傳文件等。

client_body_buffer_size

需要足夠大以容納如果需要上傳POST數據。

proxy_buffers

處理后端響應,一般是代理服務器請求后端服務的response。

如果這個buffer不夠大,會引起磁盤IO,response的body內容會先寫入臨時目錄中。

黑白名單設置

如果網站被惡意灌水或 CC 攻 擊,可從網站日志中分析特征 IP,將其 IP 或 IP 段進行屏蔽。

#語法
#allow address | CIDR | all;
#deny address | CIDR | all;


#模塊:http/server/location
#參數說明:
#allow:允許訪問。
#deny:禁止訪問。
#address:具體的ip地址。
#CIDR:ip加掩碼形式地址。
#all:所有ip地址。


白名單:


# 只允許192.168.1.0/24網段的主機訪問,拒絕其他所有


location /path/ {


    allow 192.168.1.0/24;


    deny all;


}


黑名單:


location /path/ {


    deny 192.168.1.0/24;


    allow all;


}


更多的時候客戶端請求會經過層層代理,我們需要通過$http_x_forwarded_for來進行限制,可以這樣寫


set $allow false;


if ($http_x_forwarded_for = "211.144.204.2") { set $allow true; }


if ($http_x_forwarded_for ~ "108.2.66.[89]") { set $allow true; }


if ($allow = false) { return 404; }

屏蔽非常見蜘蛛(爬蟲)

分析網站日志發現,一些奇怪的 UA 總是頻繁的來訪問,而這些 UA 對網站毫無意義,反而給服務器增加壓力,可以直接將其屏蔽。

if ($http_user_agent ~(SemrushBot|python|MJ12bot|AhrefsBot|AhrefsBot|hubspot|opensiteexplorer|leiki|webmeup)) {
 
    return 444;
 
}

上面規則報錯 444 狀態碼而不是 403。444 狀態碼在 nginx 的中有特殊含義,nginx 的 444 狀態是直接由服務器中斷連接,不會向客戶端再返回任何消息。比返回 403 更加暴力。

禁止某個目錄執行腳本

網站目錄,通常存放的都是靜態文件,如果因程序驗證不嚴謹被上傳木馬程序,導致網站被黑。以下規則請根據自身情況改為您自己的目錄,需要禁止的腳本后綴也可以自行添加。

#uploads|templets|data 這些目錄禁止執行 PHP


location ~* ^/(uploads|templets|data)/.*.(php|php5)$ {
    return 444;
}

防止文件被下載

比如將網站數據庫導出到站點根目錄進行備份,很有可能也會被別人下載,從而導致數據丟失的風險。以下規則可以防止一些常規的文件被下載,可根據實際情況增減。

location ~ .(zip|rar|sql|bak|gz|7z)$ {
    return 444;
} 

防止XSS攻擊:server

在通常的請求響應中,瀏覽器會根據Content-Type來分辨響應的類型,但當響應類型未指定或錯誤指定時,瀏覽會嘗試啟用MIME-sniffing來猜測資源的響應類型,這是非常危險的,例如一個.jpg的圖片文件被惡意嵌入了可執行的js代碼,在開啟資源類型猜測的情況下,瀏覽器將執行嵌入的js代碼,可能會有意想不到的后果。

add_header X-Frame-Options "SAMEORIGIN";


add_header X-XSS-Protection "1; mode=block";


add_header X-Content-Type-Options "nosniff";


* X-Frame-Options: 響應頭表示是否允許瀏覽器加載frame等屬性,有三個配置


    DENY:禁止任何網頁被嵌入;


    SAMEORIGIN: 只允許本網站的嵌套;


    ALLOW-FROM: 允許指定地址的嵌套;


* X-XSS-Protection: 表示啟用XSS過濾(禁用過濾為X-XSS-Protection: 0),mode=block表示若檢查到XSS攻擊則停止渲染頁面


* X-Content-Type-Options: 響應頭用來指定瀏覽器對未指定或錯誤指定Content-Type資源真正類型的猜測行為,nosniff 表示不允許任何猜測;

其他請求頭的安全配置:server

定義頁面可以加載哪些資源,上邊的配置會限制所有的外部資源,都只能從當前域名加載,其中default-src定義針對所有類型資源的默認加載策略,self允許來自相同來源的內容

add_header Content-Security-Policy "default-src 'self'";

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

會告訴瀏覽器用HTTPS協議代替HTTP來訪問目標站點,上邊的配置表示當用戶第一次訪問后,會返回一個包含了Strict-Transport-Security響應頭的字段,這個字段會告訴瀏覽器,在接下來的31536000秒內,當前網站的所有請求都使用https協議訪問,參數includeSubDomains是可選的,表示所有子域名也將采用同樣的規則

緩沖區溢出攻擊

通過將數據寫入緩沖區(http、server、location)并超出緩沖區邊界和重寫內存片段來實現的,限制緩沖區大小可有效防止

client_body_buffer_size 1K;


client_header_buffer_size 1k;


client_max_body_size 1k;


large_client_header_buffers 2 1k;


* client_body_buffer_size: 默認8k或16k,表示客戶端請求body占用緩沖區大小。如果連接請求超過緩存區指定的值,那么這些請求實體的整體或部分將嘗試寫入一個臨時文件。


* client_header_buffer_size: 表示客戶端請求頭部的緩沖區大小。絕大多數情況下一個請求頭不會大于1k,不過如果有來自于wap客戶端的較大的cookie它可能會大于 1k,Nginx將分配給它一個更大的緩沖區,這個值可以在large_client_header_buffers里面設置


* client_max_body_size: 表示客戶端請求的最大可接受body大小,它出現在請求頭部的Content-Length字段, 如果請求大于指定的值,客戶端將收到一個"Request Entity Too Large" (413)錯誤,通常在上傳文件到服務器時會受到限制


* large_client_header_buffers 表示一些比較大的請求頭使用的緩沖區數量和大小,默認一個緩沖區大小為操作系統中分頁文件大小,通常是4k或8k,請求字段不能大于一個緩沖區大小,如果客戶端發送一個比較大的頭,nginx將返回"Request URI too large" (414),請求的頭部最長字段不能大于一個緩沖區,否則服務器將返回"Bad request" (400)
同時需要修改幾個超時時間的配置:


 


client_body_timeout 10;


client_header_timeout 10;


keepalive_timeout 5 5;


send_timeout 10;


* client_body_timeout: 表示讀取請求body的超時時間,如果連接超過這個時間而客戶端沒有任何響應,Nginx將返回"Request time out" (408)錯誤


* client_header_timeout: 表示讀取客戶端請求頭的超時時間,如果連接超過這個時間而客戶端沒有任何響應,Nginx將返回"Request time out" (408)錯誤


* keepalive_timeout: 參數的第一個值表示客戶端與服務器長連接的超時時間,超過這個時間,服務器將關閉連接,可選的第二個參數參數表示Response頭中Keep-Alive: timeout=time的time值,這個值可以使一些瀏覽器知道什么時候關閉連接,以便服務器不用重復關閉,如果不指定這個參數,nginx不會在應Response頭中發送Keep-Alive信息


* send_timeout: 表示發送給客戶端應答后的超時時間,Timeout是指沒有進入完整established狀態,只完成了兩次握手,如果超過這個時間客戶端沒有任何響應,nginx將關閉連接

防盜鏈:server、location

location /images/ {
    valid_referers none blocked www.ops-coffee.cn ops-coffee.cn;
    if ($invalid_referer) {
        return 403;
    }    
}


valid_referers: 驗證referer,


none:允許referer為空


blocked:允許不帶協議的請求

除了以上兩類外僅允許referer為www.ops-coffee.cn或ops-coffee.cn時訪問images下的圖片資源,否則返回403

給不符合referer規則的請求重定向到一個默認的圖片

location /images/ {
    valid_referers blocked www.ops-coffee.cn ops-coffee.cn
    if ($invalid_referer) {
        rewrite ^/images/.*.(gif|jpg|jpeg|png)$ /static/qrcode.jpg last;
    }
}

一、限制訪問方法

禁止不安全的HTTP方法

默認情況下,Nginx支持多種HTTP方法,包括GET、POST、OPTIONS等。然而,某些HTTP方法可能存在安全風險,例如TRACE方法可以被用于跨站腳本(XSS)攻擊。我們可以使用Nginx的"limit_except"指令來限制某些HTTP方法的訪問。
示例代碼:

location / {
 limit_except GET POST {
     deny all;
 }
}

關閉不必要的目錄列表

如果Nginx的目錄沒有默認的index文件,會自動展示目錄下的文件列表,這可能會暴露敏感信息。我們可以通過禁止自動目錄列表的方式來阻止此行為。
示例代碼:

location / {

autoindex off;
}

添加賬號認證:http、server、location

server {


    location / {


        auth_basic "please input user&passwd";


        auth_basic_user_file key/auth.key;


    }


}
二、防止惡意請求和攻擊

防止惡意請求

惡意請求包括大量的請求、大文件上傳、惡意腳本等等,這會導致服務器負載過高。我們可以通過設置請求限制,來防止這種情況發生。
示例代碼:

http {
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=1r/s;
 
server {
location / {
limit_req zone=req_limit burst=5 nodelay;
# 其他配置
}
}
}

上述代碼中,我們使用"limit_req_zone"指令來定義請求限制區域,設置限制的大小和速率(每秒最多允許1個請求)。然后,在相應的"server"配置中使用"limit_req"指令來應用該限制區域。

限制請求方法:server、location

if ($request_method !~ ^(GET|POST)$ ) {


    return 405;


}


$request_method能夠獲取到請求nginx的method

配置只允許GETPOST方法訪問,其他的method返回405

拒絕User-Agent:server、location

if ($http_user_agent ~* LWP::Simple|BBBike|wget|curl) {



    return 444;


}

可能有一些不法者會利用wget/curl等工具掃描我們的網站,我們可以通過禁止相應的user-agent來簡單的防范

Nginx的444狀態比較特殊,如果返回444那么客戶端將不會收到服務端返回的信息,就像是網站無法連接一樣

防止常見攻擊

Nginx默認提供了一些防止常見攻擊的配置選項,例如:

防止緩沖區溢出攻擊:proxy_buffer_size和proxy_buffers配置選項

防止HTTP請求頭過大攻擊:large_client_header_buffers配置選項

防止URI長度過大攻擊:large_client_header_buffers配置選項

防止惡意請求:client_max_body_size配置選項

防止DDoS攻擊:limit_conn和limit_req配置選項

三、使用HTTPS保證數據傳輸安全

HTTPS協議可以保證數據傳輸的機密性和完整性,防止數據被竊取或篡改。使用HTTPS可以防止中間人攻擊、數據劫持等安全問題。我們可以使用Nginx提供的SSL模塊來配置HTTPS。
示例代碼:

server {
listen 443 ssl;
server_name example.com;
 
ssl_certificate /path/to/certificate.crt;
ssl_certificate_key /path/to/private.key;
 
location / {
# 其他配置
}
}上述代碼中,我們使用listen 443 ssl指令來監聽443端口,并使用ssl_certificate和ssl_certificate_key配置選項指定SSL證書路徑。

審核編輯:黃飛

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 服務器
    +關注

    關注

    12

    文章

    9160

    瀏覽量

    85427
  • 虛擬主機
    +關注

    關注

    0

    文章

    69

    瀏覽量

    11440
  • 安全配置
    +關注

    關注

    0

    文章

    7

    瀏覽量

    6658
  • nginx
    +關注

    關注

    0

    文章

    149

    瀏覽量

    12176

原文標題:Nginx 生產環境下的安全配置

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

收藏 人收藏

    評論

    相關推薦

    nginx重啟命令linux步驟是什么?

      1、驗證nginx配置文件是否正確   方法一:進入nginx安裝目錄sbin,輸入命令./nginx -t   看到如下顯示
    發表于 07-11 17:13

    【NanoPi NEO試用體驗】之安裝配置Nginx環境WEB網站詳解

    本帖最后由 Q69693721 于 2016-10-18 13:54 編輯 LNMP(Linux+Nginx+Mysql+PHP)相信學過計算機編程和網站的人應該都知道他一直是Linux環境
    發表于 10-18 12:25

    Linux運維Nginx軟件優化之安全優化

    一、Nginx優化分類安全優化(提升網站安全配置)性能優化(提升用戶訪問網站效率)二、Nginx安全
    發表于 12-17 15:12

    nginx中的sendfile配置說明

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

    LinuxNginx的常用命令------啟動、停止、重啟

    ~]# pkill -9 nginx 1、驗證nginx配置文件是否正確方法一:進入nginx安裝目錄***in,輸入命令./
    發表于 07-09 07:02

    LinuxNginx配置多個站點的實現方法?

    請問LinuxNginx如何配置多個站點?
    發表于 11-09 06:43

    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的學習模塊

    ;Default:sub_filter_last_modified off;Context:http、server、location配置表示客戶端和服務端交互時,nginx校驗服務端內容是否有變更,主要
    發表于 10-19 14:16

    干貨:Centos 6.5部署nginx和php環境部署

    干貨:Centos 6.5部署nginx和php環境部署
    的頭像 發表于 06-28 10:00 ?2306次閱讀

    運行nginx所需的最低配置

    安全服務器是只允許所需數量的服務器。理想情況,我們將通過單獨啟用其他功能來基于最小系統構建服務器。進行最少的配置也有助于調試。如果該錯誤在最小系統中不可用,則分別添加功能,然后繼續搜索錯誤。 這是
    的頭像 發表于 08-23 10:53 ?5511次閱讀

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

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

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

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

    Nginx的特點和作用 Nginx常用命令和核心配置

    Nginx 是開源、高性能、高可靠的 Web 和反向代理服務器,而且支持熱部署,幾乎可以做到 7 * 24 小時不間斷運行,即使運行幾個月也不需要重新啟動,還能在不間斷服務的情況對軟件版本進行熱
    的頭像 發表于 09-01 09:53 ?725次閱讀
    <b class='flag-5'>Nginx</b>的特點和作用 <b class='flag-5'>Nginx</b>常用命令和核心<b class='flag-5'>配置</b>

    nginx負載均衡配置介紹

    目錄 nginx負載均衡 nginx負載均衡介紹 反向代理與負載均衡 nginx負載均衡配置 Keepalived高可用nginx負載均衡器
    的頭像 發表于 11-10 13:39 ?243次閱讀
    <b class='flag-5'>nginx</b>負載均衡<b class='flag-5'>配置</b>介紹
    主站蜘蛛池模板: 国产小毛片| 欧美一级黄视频| 亚洲美女爱爱| 女人双腿搬开让男人桶 | 91网视频在线观看| 天天操天天爱天天干| 狠狠操欧美| 在线免费公开视频| 色香视频首页| 伊人福利视频| 69xxx日本| 欧美在线视频一区二区三区| 国产激爽大片在线播放| 天天干天天舔天天操| 888xxxx免费视频| 午夜日| www.成人在线| tueb69xxxxxhd日本| 在线三级网| 国产一级淫| 色吧首页dvd| 亚洲国内精品| 国产精品成人在线播放| 午夜色大片在线观看| 一区二区三区四区国产精品| 好硬好大好爽女房东在线观看| 天天性综合| 国产亚洲欧美一区| 日韩欧美卡通动漫在线观看| 高清一级做a爱免费视| 久久精品国产免费| 乱轮黄色小说| 欧美性野久久久久久久久| 人人干人| 狠狠干狠狠色| 搞逼综合网| 同性男男肉交短文| 狠狠五月深爱婷婷网免费| 四虎免费看黄| 免费观看a黄一级视频| 1024你懂的日韩|