1. 程式人生 > >nginx(二) nginx編譯安裝 及 配置WEB服務

nginx(二) nginx編譯安裝 及 配置WEB服務

nginx(二) nginx編譯安裝 及 配置WEB服務

       在前面《nginx詳解》文章中,我們對nginx有了一個基本的認識:包括應用場景、nginx基本架構、功能特性、併發模型以及配置說明等,我們知道nginx應用比較多的場景是WEB伺服器和反向代理伺服器。

下面將先進行nginx編譯安裝,然後再進行nginx的WEB服務相關的應用配置:包括設定配置檔案vim下語法高亮顯示、配置虛擬主機、基於IP的訪問控制、基於使用者認證的訪問控制、建立下載站點下載列表、URL地址重寫/重定向、防盜鏈、提供Nginx狀態頁面、配置gzip壓縮、日誌、基於SSL提供https服務等。

1、配置環境準備

1、WEB伺服器:

主機系統:CentOS 6.4 x86_64;

IP:192.168.18.242 (host name:node2.tjiyu.com);

2、Client端:

IP:192.168.18.245;

一般瀏覽器;

2、下載編譯安裝

nginx官網上把最新穩定版本的原始碼包下載下來,我們這裡使用nginx-1.10.2版本;然後把原始碼包放到我們操作的主機上,下面開始編譯安裝。

2-1、解壓,建立軟連結

  1. [[email protected] ~]# tar xf nginx-1.10.2.tar.gz  
  2. [[email protected] ~]# ln -sv nginx-1.10.2 nginx  
  3. [[email protected] ~]# cd nginx  
  4. [[email protected] nginx]# ll  

2-2、安裝編譯開發工具類庫

用yum安裝、更新開發工具"Development Tools"和"Server Platform Deveopment",而nginx會依賴openssl-devel和pcre-devel類庫,安裝如下:

  1. [[email protected] nginx]# yum groupinstall "Development Tools" "Server Platform Deveopment"  
  2. [[email protected]
     ~]# yum install openssl-devel pcre-devel  

2-3、建立使用者和使用者組

分別建立名為"nginx"的使用者和組,用來執行nginx的worker程序,操作如下:

  1. [[email protected] nginx]# groupadd -r nginx  
  2. [[email protected] nginx]# useradd -r -g nginx nginx  

2-4、編譯並安裝

先configure指定編譯選項,如安裝目錄、上面建立的執行使用者、需要的擴充套件模組(SSL、FastCGI)等,選項及引數說明:http://nginx.org/en/docs/configure.html,操作如下:

./configure \
  --prefix=/usr \
  --sbin-path=/usr/sbin/nginx \
  --conf-path=/etc/nginx/nginx.conf \
  --error-log-path=/var/log/nginx/error.log \
  --http-log-path=/var/log/nginx/access.log \
  --pid-path=/var/run/nginx/nginx.pid  \
  --lock-path=/var/lock/nginx.lock \
  --user=nginx \
  --group=nginx \
  --with-http_ssl_module \
  --with-http_flv_module \
  --with-http_stub_status_module \
  --with-http_gzip_static_module \
  --http-client-body-temp-path=/var/tmp/nginx/client/ \
  --http-proxy-temp-path=/var/tmp/nginx/proxy/ \
  --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
  --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
  --http-scgi-temp-path=/var/tmp/nginx/scgi \
  --with-pcre

Configure成功如下:

接著開始編譯並安裝,如下:

[[email protected] nginx]# make && make install  

2-5、為nginx提供SysV init服務指令碼

先建立/etc/init.d/nginx服務指令碼,這基於ngInx自身提供的命令實現的,指令碼內容如下:

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15 
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# config:      /etc/sysconfig/nginx
# pidfile:     /var/run/nginx.pid
 
# Source function library.
. /etc/rc.d/init.d/functions
 
# Source networking configuration.
. /etc/sysconfig/network
 
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
 
nginx="/usr/sbin/nginx"
prog=$(basename $nginx)
 
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
 
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
 
lockfile=/var/lock/subsys/nginx
 
make_dirs() {
   # make required directories
   user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
   options=`$nginx -V 2>&1 | grep 'configure arguments:'`
   for opt in $options; do
       if [ `echo $opt | grep '.*-temp-path'` ]; then
           value=`echo $opt | cut -d "=" -f 2`
           if [ ! -d "$value" ]; then
               # echo "creating" $value
               mkdir -p $value && chown -R $user $value
           fi
       fi
   done
}
 
start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    make_dirs
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}
 
stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}
 
restart() {
    configtest || return $?
    stop
    sleep 1
    start
}
 
reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}
 
force_reload() {
    restart
}
 
configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}
 
rh_status() {
    status $prog
}
 
rh_status_q() {
    rh_status >/dev/null 2>&1
}
 
case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac

併為此指令碼賦予執行許可權,然後新增到系統服務管理列表,並讓其開機自動啟動,操作如下:

  1. [[email protected] nginx]# vim /etc/init.d/nginx  
  2. [[email protected] nginx]# chmod +x /etc/init.d/nginx  
  3. [[email protected] nginx]# chkconfig --add nginx  
  4. [[email protected] nginx]# chkconfig nginx on  
  5. [[email protected] nginx]# chkconfig --list nginx  

2-6、啟動並訪問測試

啟動nginx,我們看到因為httpd佔用80埠而失敗,關閉httpd後再啟動nginx正常;檢視網路狀態,可以看到nginx正在監聽80埠;用測試主機訪問nginx主機的IP,可以看到nginx的歡迎頁面,過程如下:

  1. [[email protected] nginx]# service nginx start  
  2. [[email protected] nginx]# netstat -ntulp | grep nginx  

3、配置Nginx

前面編譯nginx的時候,我們用選項--conf-path=/etc/nginx/nginx.conf(預設也是這個目錄),指定的了配置檔案及所在目錄,所以我們到/etc/nginx/下可以看到nginx.conf配置檔案,而.default結尾的是nginx預設編譯選項的配置檔案,已經沒有意義了。

前面《nginx詳解》我們已經詳細分析說明nginx配置檔案的幾個配置區域塊和大部分的配置選項,下面就不一一說明了,只說明一些用到的配置選項。

3-1、設定配置檔案vim下語法高亮顯示

linux系統下vim或者vi編輯器預設是沒有對nginx配置的語法高亮設定。但是我們可以到http://www.vim.org/scripts/script.php?script_id=1886下載nginx.vim,然後根據它上面的說明,進行簡單的配置,如下:

[[email protected] ~]# mkdir .vim/syntax -pv  
[[email protected] ~]# cd .vim/syntax/  
[[email protected] syntax]# mv ~/nginx.vim ./  
[[email protected] syntax]# ls  
nginx.vim  
[[email protected] syntax]# cd ..  
[[email protected] .vim]# vim filetype.vim  
[[email protected] .vim]# cat filetype.vim  
au BufRead,BufNewFile /etc/nginx/*,/usr/local/nginx/conf/* if &ft == '' | setfiletype nginx | endif  
[[email protected] .vim]# vim /etc/nginx/nginx.conf  

3-2、配置虛擬主機

編輯nginx.conf,配置兩個虛擬主機www.tjiyu.com和www.test.com,資原始檔目錄分別/data/tjiyu和/data/test,可以看到最簡單的配置只需要三行,操作如下:

  1. [[email protected] nginx]# cp nginx.conf nginx.conf.bak  
  2. [[email protected] nginx]# vim nginx.conf  
  3. server {   
        listen 80;   
        server_name www.tjiyu.com;   
        location / {    
        root /data/tjiyu;    
        index index.html index.htm;    
        }    
    }    
    server {    
        listen 80 ;  
        server_name www.test.com;    
        root /data/test;    
    }  

然後分別建立資源目錄,提供index.html測試頁面,然後使nginx重新載入配置,操作如下:

  1. [[email protected] nginx]# mkdir /data    
  2. [[email protected] nginx]# mkdir /data/tjiyu    
  3. [[email protected] nginx]# echo "<h1>www.tjiyu.com</h1>" > /data/tjiyu/index.html    
  4. [[email protected] nginx]# mkdir /data/test    
  5. [[email protected] nginx]# echo "<h1>www.test.com</h1>" >  /data/test/index.html   
  6. [[email protected] nginx]# service nginx reload  

在我們的測試主機上配置hosts,讓訪問虛擬主機名可以指向主機IP,win7 x86_64上C:\Windows\System32\drivers\etc\HOSTS新增如下兩行記錄,如上:

  1. 192.168.18.242    www.tjiyu.com    
  2. 192.168.18.242 www.test.com  

然後訪問兩個訪問虛擬主機,可以看到提供的測試頁面;因為我們在www.test.com的listen選項配置了default_server,所以直接訪問主機IP是返回的是該虛擬主機的頁面,如下:

3-3、基於IP的訪問控制

配置第二臺虛擬主機只允許的192.168.18.*網段內的主機訪問,但除測試主機192.168.18.244外,注意,多個規則是自上而下進行匹配的,所以不允許測試主機訪問得在最上面;測試訪問www.test.com可以看到返回403禁止訪問頁面,而訪問www.tjiyu.com是正常的,過程如下:

  1. [[email protected] nginx]# vim nginx.conf    
  2. [email protected] nginx]# service nginx reload  
  1. server {    
  2.    listen 80 default_server;    
  3.    server_name www.test.com;    
  4.    root /data/test;          
  5.    deny 192.168.18.244;    #不允許測試主機訪問    
  6.    allow 192.168.18.0/24;    #只允許的192.168.18.*網段內的主機訪問    
  7.    deny all;                #不允許其他所有外網訪問  
  8.     }

3-4、基於使用者認證的訪問控制

基於使用者認證的訪問控制是ngx_http_auth_basic_module模組的功能,只有配置名稱(或者off)選項auth_basic和配置檔案選項auth_basic_user_file,檔案由htpasswd生成,包括使用者和密碼。

先建立需要使用者認證的目錄/data/test/admin,提供一個測試頁面;然後用htpasswd生成認證檔案;編輯配置檔案,用location匹配/data/test/admin目錄,接著在裡面配置訪問控制配置的名稱字串和訪問控制配置的檔案,過程如下:

  1.  [[email protected] nginx]# mkdir /data/test/admin    
  2. [[email protected] nginx]# echo "<h1>admin area</h1>" > /data/test/admin/index.html    
  3. [[email protected] nginx]# htpasswd -c -m /etc/nginx/.htpasswd admin    
  4. [[email protected] nginx]# vim nginx.conf    
  5. [[email protected] nginx]# service nginx reload  
  1. server {    
  2.     listen 80 default_server; #配置預設虛擬主機    
  3.     server_name www.test.com; #配置虛擬主機名    
  4.     root /data/test; #配置資原始檔根目錄           
  5.     #deny 192.168.18.244; #不允許測試主機訪問    
  6.     allow 192.168.18.0/24; #只允許的192.168.18.*網段內的主機訪問    
  7.     deny all; #不允許其他所有外網訪問             
  8.     location /admin/ { #匹配基於使用者認證的訪問控制    
  9.         auth_basic "admin area"; #訪問控制配置的名稱字串,或者off關閉    
  10.         auth_basic_user_file /etc/nginx/.htpasswd; #訪問控制配置的檔案,htpasswd生成,包含使用者名稱用密碼    
  11.     }    
  12. }   

測試訪問www.test.com正常,訪問www.test.com/admin/需要使用者和密碼認證,也就實現了目錄/data/test/admin裡的資源需要使用者認證,如下:

3-5、建立下載站點下載列表

下載站點下載列表是ngx_http_autoindex_module模組的功能,有幾個選項,最基本就是開關選項autoindex on | off和顯示時間選項autoindex_localtime on | off。

先建立存放下載資源的目錄/data/test/download,複製一些檔案進去提供測試;然後編輯配置檔案,用location匹配/data/test/download目錄,接著在裡面配置開啟下載列表功能;測試訪問www.test.com/download可以看到下載列表,過程如下:

  1.  [[email protected] nginx]# mkdir /data/test/download    
  2. [[email protected] nginx]# cp /etc/nginx/* /data/test/download/    
  3. [[email protected] nginx]# vim nginx.conf    
  4. [[email protected] nginx]# service nginx reload  
  1. server {    
  2.     listen 80 default_server;    
  3.     server_name www.test.com;    
  4.     root /data/test;           
  5.     location /download/ {    
  6.         autoindex on; #開啟下載列表功能    
  7.         autoindex_localtime on; #顯示時間    
  8.     }     
  9. }  

3-6、URL地址重寫/重定向

URL地址重寫/重定向是ngx_http_rewrite_module模組的功能,通過正則匹配,把匹配的URL重寫為指定的URL,以重寫的URL來請求響應。主要應用在實現URL跳轉、域名跳轉、站點映象等,比如網站改版,目錄結構發生改變,但不希望不改變頁面中的URL,用URL地址重寫來實現。

1、if和rewrite選項

這裡有兩個比較重要的選項,if和rewrite:If在上面已經介紹過了,在很多地方都用到,這裡用於檢測條件是否成立;而rewrite regex replacement [flag],匹配regex正則表示式(可以省略,直接重寫),以replacement重寫代替,flag為標誌位,主要有:

  1. last:一旦被當前規則匹配並重寫後立即停止檢查後續餓的其他rewrite的規則,而後通過重寫後的規則重新發起請求;    
  2. break:一旦被當前規則匹配並重寫後立即停止檢查後續餓的其他rewrite的規則,而後繼續由nginx進行後續的操作;    
  3. redirect:返回302臨時重定向程式碼;    
  4. permanent:返回301永久重定向;  

注意:當有多個rewrite規則一起使用時,可能會迴圈匹配,nginx最多迴圈10次,超出之後返回500錯誤;一般將rewrite寫在location中時都使用break標誌,或者將rewrite寫if上下文中。

2、配置

配置www.test.com虛擬主機的當目錄$root_dir/images改為$root_dir /imgs時,可以通過URL重寫,讓www.test.com/images/*請求還能和原來一樣,不過實際變為了www.test.com/imgs/*。

直接建立/data/test/imgs目錄,放一些圖片檔案進去用來測試;然後配置檔案;測試訪問www.test.com/images/2.jpg可以正常看到剛才放到/data/test/imgs圖片,過程如下:

  1. [[email protected] nginx]# mkdir /data/test/imgs    
  2. [[email protected] nginx]# mv /root/*.jpg /data/test/imgs/    
  3. [[email protected] nginx]# ls /data/test/imgs/    
  4. [[email protected] nginx]# vim nginx.conf    
  5. [[email protected] nginx]# service nginx reload  
  1. server {    
  2.     listen 80 default_server;    
  3.     server_name www.test.com;    
  4.     root /data/test;    
  5.     location /images/ {    
  6.         rewrite ^/images/(.*)$ /imgs/$1 break; #URL重寫:讓www.test.com/images/*請求還能和原來一樣,不>過實際變為了www.test.com/imgs/*    
  7.     }    
  8. }  

相關推薦

nginx nginx編譯安裝 配置WEB服務

nginx(二) nginx編譯安裝 及 配置WEB服務       在前面《nginx詳解》文章中,我們對nginx有了一個基本的認識:包括應用場景、nginx基本架構、功能特性、併發模型以及配置說明等,我們知道nginx應用比較多的場景是WEB伺服器和反向代理伺服器。下面

mysql + php + nginx LNMP原始碼編譯安裝

mysql原始碼編譯安裝 mysql原始碼安裝需要使用c++的boost庫,而mysql-boost壓縮包自帶boost庫,不需要在下載boost安裝包,mysql在3.8版本以後使用cmake跨平臺工具預編譯原始碼,用於設定mysql的編譯引數;biso

Nginx------nginx.conf 配置文件

影響 name 模型 logs deny app params 路徑 localhost   上一篇博客我們將 nginx 安裝在 /usr/local/nginx 目錄下,其默認的配置文件都放在這個目錄的 conf 目錄下,而主配置文件 nginx.conf 也在其中,後

ElasticSearch學習 - Node.js安裝環境配置之Windows篇

  一、安裝環境 1、本機系統:Windows 10 Pro(64位) 2、Node.js:node-v10.14.2-x64.msi(64位) 二、安裝Node.js步驟 1、下載對應你係統的Node.js版本:https://nodejs.org/en/download

1109_Solr學習總結Solr的安裝配置

Solr學習總結(二)Solr的安裝與配置 接著前一篇,這裡總結下Solr的安裝與配置     1.準備     1.安裝Java8 和 Tomcat9 ,java和tomcat 的安裝這裡不再重複。需要注意的是這兩個的版本相容問題。貌似java8 不支援,tomcat7

Solr學習總結Solr的安裝配置

 1.準備     1.安裝Java8 和 Tomcat9 ,java和tomcat 的安裝這裡不再重複。需要注意的是這兩個的版本相容問題。貌似java8 不支援,tomcat7 以下版本。     2.下載 solr安裝包,目前的最新版本是  5.3.1  2

Nginx——安裝Nginx

open 配置 發的 一個 regular 處理 pid src 運行 安裝所需環境 Nginx 是 C語言 開發,建議在 Linux 上運行,當然,也可以安裝 Windows 版本,本篇則使用 CentOS 7 作為安裝環境。 gcc 安裝 安裝 nginx 需要先將官

Nginx+Tomcat+Redis+Mysql安裝

先上官網下載安裝包,安裝nginx需要預先安裝zlib、pcre 安裝nginx 解壓:var -zxvf nginx-5,解壓完進入目錄,可以看到,configure為環境檢測指令碼 ./configure進行安裝前的檢測: 缺少pcre和zlib,安裝pcr

NginxNginx安裝

首先從官網上http://nginx.org/下載最新的stable version原始碼,當前最新版本為nginx-1.10.2.tar.gz。2.1 configure解壓之後,會發現裡面有一個名為“configure”的檔案:configure本身是一個Shell指令碼,中間會呼叫<nginx-

linux安裝nginx

解壓依然是直接命令:tar -zxvf nginx-1.10.1.tar.gz cd nginx-1.10.1配置其實在 nginx-1.10.1 版本中你就不需要去配置相關東西,預設就可以了。當然,如果你要自己配置目錄也是可以的。1.使用預設配置./configure編譯安

基於linux + nginx + mysql + php原始碼包安裝搭建

lnmp是什麼? LNMP指的是一個基於CentOS/Debian編寫的Nginx、PHP、MySQL、phpMyAdmin、eAccelerator一鍵安裝包。可以在VPS、獨立主機上輕鬆的安裝LNMP生產環境。 簡介: LNMP代表的就是:Linux系

負載均衡系列之nginx

永遠 實例 表示 特性 反向代理服務器 依據 forward 訪問 子郵件 Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行 其特點是占有內存少,並發能力強,事實上nginx的並發能力

戲說Nginx

nginx web Nginx功能介紹: 1.Nginx反向代理應用實例: 反向代理(Reverse Proxy)方式是指通過代理服務器來接受Internet上的連接請求,然後將請求轉發給內部網絡上的服務器,並且將從內部網絡服務器上得到的結果返回給Internet上請求連接的客戶端

nginx源碼編譯安裝配置文件說明

nginx源碼安裝nginx源碼編譯安裝 安裝nginx的依賴包(pcre-devel openssl-devel) [root@anuo ~]# yum install pcre-devel openssl-devel -y 創建管理用戶 nginx [root@anuo ~]# useradd -s /s

maven,Linux安裝maven3.5.3配置

col sha TP sharp 全局 local roo mave pat   Linux系統,ubuntu-16.04.4,安裝maven3.5.3   一、創建文件夾   註意Linux用戶,這個如果不是root用戶,命令前面需要加:sudo //創建一個目錄 mk

資料實時監控平臺:Telegraf簡介安裝

接著上一篇部落格:InfluxDB簡介及安裝,這篇部落格介紹下Linux環境下Telegraf安裝以及其功能特點。。。 官網地址:influxdata 官方文件:telegraf文件   環境:CentOS7.4 64位 Telegraf版本:0.11.1-1   一、Tel

數據實時監控平臺:Telegraf簡介安裝

完成 成功 show user 官方文檔 targe 相關 erp tps 設計 接著上一篇博客:InfluxDB簡介及安裝,這篇博客介紹下Linux環境下Telegraf安裝以及其功能特點。。。 官網地址:influxdata 官方文檔:telegraf文檔 環境:C

nginx

增加錯誤日誌 localtion如何過濾以及過濾的優先順序是什麼? 使用者訪問域名自動在域名後邊加/符號 驗證配置檔案對不對(配置檔案絕對路徑+t)  (1)精確匹配 (2)特殊正則 (3)普通正則 (4)字串字首匹配 (5)預設匹配 rewrite 企業用

zabbix3.2監控nginx

上篇文章中監控了nginx status,這篇文章來介紹如何新增模板設定告警(客戶端配置見上一篇文章) 1、配置-模板-建立模板 名稱隨意,新增到相應的群組中,最後點選新增 2、建立模板監控項 繼續再添加個監控項 我這裡演示只添加了兩個,其他同理 3、設定觸發器 名稱我這裡設定為(自行

nginx:負載均衡實戰nginx=keepalived

1.安裝keepalived 下載依賴: yum -y install gcc pcre-devel zlib-devel openssl-devel 換源為阿里雲的,準備下載keepalived,沒有wget的先yum install wget mv /etc/yum.repos.d/C