CentOS安裝Nginx-1.6.2+安全配置

来源:http://www.cnblogs.com/brishenzhou/archive/2016/12/07/6140458.html
-Advertisement-
Play Games

CentOS 6.5 x86_64系統下安裝Nginx-1.6.2,並且根據生產環境需要做了一定的安全配置。 ...


 

註:以下所有操作均在CentOS 6.5 x86_64位系統下完成。

 

#準備工作#

在安裝Nginx之前,請確保已經使用yum安裝了pcre等基礎組件,具體見《CentOS安裝LNMP環境的基礎組件》

然後創建www的用戶組和用戶,並且不允許登錄許可權:

# id www
id: www:無此用戶
# groupadd www
# useradd -g www -s /sbin/nologin www
# id www
uid=501(www) gid=501(www) 組=501(www)

 

#Nginx的安裝#

開始下載Nginx併進行編譯安裝:

# cd /usr/local/src
# wget http://nginx.org/download/nginx-1.6.2.tar.gz
# tar zxf nginx-1.6.2.tar.gz
# cd nginx-1.6.2
# ./configure --prefix=/usr/local/nginx-1.6.2 --group=www --user=www --with-http_ssl_module --with-pcre --with-http_stub_status_module --with-http_gzip_static_module

Configuration summary
  + using system PCRE library
  + using system OpenSSL library
  + md5: using OpenSSL library
  + sha1: using OpenSSL library
  + using system zlib library

  nginx path prefix: "/usr/local/nginx-1.6.2"
  nginx binary file: "/usr/local/nginx-1.6.2/sbin/nginx"
  nginx configuration prefix: "/usr/local/nginx-1.6.2/conf"
  nginx configuration file: "/usr/local/nginx-1.6.2/conf/nginx.conf"
  nginx pid file: "/usr/local/nginx-1.6.2/logs/nginx.pid"
  nginx error log file: "/usr/local/nginx-1.6.2/logs/error.log"
  nginx http access log file: "/usr/local/nginx-1.6.2/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"

# make && make install
# ln -s /usr/local/nginx-1.6.2/ /usr/local/nginx
# chown -R www:www /usr/local/nginx
# chown -R www:www /usr/local/nginx-1.6.2

把Nginx的sbin目錄加入PATH:

# vim /etc/profile

export PATH=$PATH:/usr/local/mysql/bin:$JAVA_HOME/bin:/usr/local/nginx/sbin

# source /etc/profile

查看Nginx的版本信息,並且檢驗上一步驟是否成功:

# nginx -V
nginx version: nginx/1.6.2
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx-1.6.2 --group=www --user=www --with-http_ssl_module --with-pcre --with-http_stub_status_module

至此,Nginx已經安裝完畢。

 

#Nginx的啟動/重啟/關閉#

給Nginx的webapp配置相關路徑(這裡是為了後面運維管理方便,可以把不同的Web項目放到該目錄下):

# mkdir -p /data/www

簡單修改下配置文件:

# vim /usr/local/nginx/conf/nginx.conf

user  www;
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile      on;
    keepalive_timeout  65;
    gzip  on;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
    }
}

開始啟動Nginx:

# nginx

這個時候打開瀏覽器訪問地址http://youripaddress應該可以看到:

至此,Nginx已經啟動成功。

一般來說,當修改了nginx.conf配置文件後,可以直接重啟讓配置生效,重啟之前一般檢測下配置文件是否正確:

# nginx -t
nginx: the configuration file /usr/local/nginx-1.6.2/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx-1.6.2/conf/nginx.conf test is successful
# nginx -s reload

另外,重啟也可以通過發信號的方式:

# kill -HUP ${master_pid}

關閉的命令如下:

# nginx -s quit
# nginx -s stop

註:quit表示等請求結束後再關閉,stop表示立刻關閉。

也可以通過發信號的方式來關閉: 

# kill -QUIT ${nginx_master}
# kill -TERM ${nginx_master}
# kill -9 ${nginx_master}

註:-QUIT表示從容停止,等所有請求結束後再關閉進程;TERM則表示立刻關閉進程;-9表示強制關閉。

為了以後管理上的方便, 我們這裡寫個啟動腳本,以後就可以用service命令來啟動,如下:

# vim /etc/init.d/nginxd

#!/bin/sh
# chkconfig: 2345 85 15
# description:Nginx Server

NGINX_HOME=/usr/local/nginx-1.6.2
NGINX_SBIN=$NGINX_HOME/sbin/nginx
NGINX_CONF=$NGINX_HOME/conf/nginx.conf
NGINX_PID=$NGINX_HOME/logs/nginx.pid

NGINX_NAME="Nginx"

. /etc/rc.d/init.d/functions

if [ ! -f $NGINX_SBIN ]
then
    echo "$NGINX_NAME startup: $NGINX_SBIN not exists! "
    exit
fi

start() {
    $NGINX_SBIN -c $NGINX_CONF
    ret=$?
    if [ $ret -eq 0 ]; then
        action $"Starting $NGINX_NAME: " /bin/true
    else
        action $"Starting $NGINX_NAME: " /bin/false
    fi
}

stop() {
    kill `cat $NGINX_PID`
    ret=$?
    if [ $ret -eq 0 ]; then
        action $"Stopping $NGINX_NAME: " /bin/true
    else
        action $"Stopping $NGINX_NAME: " /bin/false
    fi
}

restart() {
    stop
    start
}

check() {
    $NGINX_SBIN -c $NGINX_CONF -t
}


reload() {
    kill -HUP `cat $NGINX_PID` && echo "reload success!"
}

relog() {
    kill -USR1 `cat $NGINX_PID` && echo "relog success!"
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        restart
        ;;
    check|chk)
        check
        ;;
    status)
        status -p $NGINX_PID
        ;;
    reload)
        reload
        ;;
    relog)
        relog
        ;;
    *)
        echo $"Usage: $0 {start|stop|restart|reload|status|check|relog}"
        exit 1
esac

# chmod +x /etc/init.d/nginxd
# chkconfig nginxd on

這樣子就可以通過service來啟動:

# service nginxd start

 

#Nginx的安全配置#

1、 首先設置不允許目錄瀏覽,預設配置即為不允許。

autoindex off

2、開啟訪問日誌,nginx中預設已開啟,這裡我們後續為了運維管理上的方便最好把日誌單獨放到/data目錄下。

access_log /data/www/logs/localhost.access.log

3、確保目錄的安全,由於Nginx使用的是www用戶啟動,黑客入侵伺服器成功後將獲得www用戶的許可權,所以需要確保網站Web目錄和文件的屬主與啟動用戶不同,防止網站被黑客惡意篡改和刪除。網站Web目錄和文件的屬主可以設置為root,其中Web目錄許可權統一設置為755,Web文件許可權統一設置為644。只有上傳目錄等可讀寫許可權的目錄可以被設置為777,為了防止黑客上傳木馬到777許可權目錄中,還必須保證該777許可權的目錄沒有執行腳本的許可權。這裡有兩種情況處理:

1)對於使用PHP的業務,配置如下:

location ~* ^/data/www/logs/.*\.(php|php5)$ {
    deny all;
}

註:當然最安全的還是給PHP的可執行目錄採用白名單的方式,這個我們在PHP的安裝一節中再詳細介紹。

2)對於非使用PHP的業務(如python、cgi等),則需要禁止外部訪問777目錄,配置如下:

location ~ ^/data/www/logs/ {
    deny all;
}

4、對於管理目錄,需要限制訪問的IP地址,比如這裡限制訪問nginx狀態的:

server {
    location /nginx-admin {
        stub_status on;
        access_log logs/nginx-admin.log;
        allow 11.12.23.0/24;
        deny all;
    }

    location /admin {
        ...
    }
}

註:上面配置的11.12.23.0/24指的就是當前運維客戶端的IP地址段。

在允許IP的機器上輸入地址應該可以看到: 

而不允許的用戶訪問應該是不可以的,會顯示403錯誤,比如:

 

5、把Nginx預設的首頁等頁面刪除,使用業務自己的首頁來頂替。

6、不允許IP直接訪問伺服器,這樣的好處是怕當IP地址泄漏出去之後,被人用別的功能變數名稱來指向了這個IP地址,可以設置讓其返回500等錯誤碼。比如:

server {
    listen        80 default;
    return 500;
}
server {
    listen        80;
    server_name   www.tencent.com tencent.com;
    root          /data/www/tencent;

    access_log    /data/logs/nginx/tencent.access.log;
    error_log     /data/logs/nginx/tencent.error.log;
}

註:上面的配置表示當使用IP地址直接訪問時將出錯,而使用功能變數名稱訪問時(比如請求tencent.com則正常)。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1>> 力軟信息化系統快速開發框架 2>> 金碟友商網 3>> ...
  • 雖然ASP.NET Core是一款“動態”的Web服務端框架,但是在很多情況下都需要處理針對靜態文件的請求,最為常見的就是這對JavaScript腳本文件、CSS樣式文件和圖片文件的請求。針對不同格式的靜態文件請求的處理,ASP.NET Core為我們提供了三個中間件,它們將是本章論述的重點。不過在... ...
  • 觀察者模式, 就像一群人在玩大家來找茬一樣, 一幅一幅的玩. 這種玩的方式, 是類似於推拉模式中的推模式的. 推送給玩家的是, 兩幅圖片, 相同的部分和不同的部分都推送給你, 但是, 作為玩家來說, 其實更想要的, 只是不同的部分. 下麵以一個簡單的示意性實現為例,討論觀察者模式的結構。 觀察者模式 ...
  • arm處理器以其低功耗和小尺寸而聞名,幾乎所有的手機處理器都是基於arm,在嵌入式系統中應用非常廣泛。 armv6, armv7, armv7s, arm64指的是arm處理器的指令集。 i386, x86_64指的是pc端處理器指令集。 所有指令集原則上是向下相容的。 arm64:iPhone6s ...
  • 今天在運行自己編寫的App時,突然發現App在運行時閃退,然後就查看了Android Studio的Log,發現了這個錯誤,上網查了一下,才知道是RecyclerView的原生Bug,在數據更新時會出現這個Bug,錯誤顯示為 可以看到錯誤並沒有指到我自己所寫的代碼,所以斷定是原生的Bug。 錯誤解決 ...
  • Linux設備驅動中必須解決的一個問題是多個進程對共用資源的併發訪問,併發的訪問會導致競態。中斷屏蔽、原子操作、自旋鎖和信號量都是解決併發問題的機制。中斷屏蔽很少單獨被使用,原子操作只能針對整數進行,因此自旋鎖和信號量應用最為廣泛。自旋鎖會導致死迴圈,鎖定期間不允許阻塞,因此要求鎖定的臨界區小。信號... ...
  • CentOS 6.5 x86_64系統下安裝Apache-2.4.10,並且根據生產環境需要做了一定的安全配置。 ...
  • 設備驅動充當了硬體和應用軟體之間的紐帶,它使得應用軟體只需要調用系統軟體的應用編程介面(API)就可讓硬體去完成要求的工作。本文主要講解了Linux設備驅動與硬體的關係,Linux設備驅動的開發模式以及內核中相關的重要基礎數據結構。 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...