• <table id="x5mq0"><track id="x5mq0"></track></table>
  • <code id="x5mq0"><nobr id="x5mq0"><sub id="x5mq0"></sub></nobr></code>

      <pre id="x5mq0"><small id="x5mq0"><p id="x5mq0"></p></small></pre>
    1. <pre id="x5mq0"><small id="x5mq0"><track id="x5mq0"></track></small></pre>

    2. <th id="x5mq0"><video id="x5mq0"></video></th>

      編譯部署NGINX

      一般部署nginx有2中方法。直接使用系統提供的包apt-get 方式安裝,這種就非常方便,但是沒有最新版本可用。另外一種就是使用源代碼自己編譯安裝部署。

      這里要說的就是使用源代碼方式,用源代碼編譯部署nginx還是比較方便的,沒什么特別繞的地方?;揪褪窍螺d代碼、生成配置再編譯的正常流程。對二次開發來說,編譯部署是家常便飯的事情。不管后續運維還是二次開發,熟悉源代碼編譯部署還是很有必要的。后續的Django部署會使用這種編譯的方法部署。

      剛寫完這篇文章就出了nginx-1.10.0的穩定版本。小伙伴們可以升級了。

      測試環境:

      • windows 7
      • Oracle VirtualBox VM 5.0

      搭建:

      • Debian 7.5 (全新環境)
      • Nginx 1.9.12
      • IP: 192.168.10.14
      • DIR: /usr/local/nginx

      依賴模塊:

      • rewrite模塊需要 pcre 庫
      • ssl 功能需要openssl庫
      • gzip模塊需要 zlib 庫

      安裝編譯工具:

      $ sudo apt-get install gcc automake autoconf libtool make g++ -y
      

      pcre 需要 g++ 編譯

      依賴庫編譯

      安裝zlib

      基本流程:
      1.獲取zlib編譯安裝包,在http://www.zlib.net/上可以獲取當前最新的版本。
      2.解壓縮openssl-xx.tar.gz包。
      3.進入解壓縮目錄,執行./configure。
      4.make & make install

      $ cd ~
      $ wget http://zlib.net/zlib-1.2.8.tar.gz
      $ tar xzvf zlib-1.2.8.tar.gz
      $ cd ~/zlib-1.2.8
      $ ./configure --prefix=/usr/local/zlib
      $ make
      $ sudo make install
      

      安裝pcre

      基本流程:
      1.獲取pcre編譯安裝包,在http://www.pcre.org/上可以獲取當前最新的版本
      2.解壓縮pcre-xx.tar.gz包。
      3.進入解壓縮目錄,執行./configure。
      4.make & make install

      $ cd ~
      $ wget http://downloads.sourceforge.net/project/pcre/pcre/8.38/pcre-8.38.tar.gz
      $ tar xzvf pcre-8.38.tar.gz
      $ cd ~/pcre-8.38
      $ ./configure --prefix=/usr/local/pcre
      $ make
      $ sudo make install
      

      安裝openssl

      基本流程:
      1.獲取openssl編譯安裝包,在http://www.openssl.org/source/上可以獲取當前最新的版本。
      2.解壓縮openssl-xx.tar.gz包。
      3.進入解壓縮目錄,執行./config。
      4.make & make install

      $ cd ~
      $ wget http://www.openssl.org/source/openssl-1.0.1r.tar.gz
      $ tar xzvf openssl-1.0.1r.tar.gz
      $ cd ~/openssl-1.0.1r
      $ ./config --prefix=/usr/local/openssl
      $ make
      $ sudo make install
      

      編譯Nginx源代碼

      基本流程:
      1.獲取nginx,在http://nginx.org/en/download.html上可以獲取當前最新的版本。 2.解壓縮nginx-xx.tar.gz包。 3.進入解壓縮目錄,執行./configure 4.make & make install

      上面已經把3個關聯包解壓,編譯時只要指定代碼路徑。

      $ cd ~
      $ wget http://nginx.org/download/nginx-1.9.12.tar.gz
      $ tar xzvf nginx-1.9.12.tar.gz
      $ cd ~/nginx-1.9.12
      $ ./configure \
      --prefix=/usr/local/nginx \
      --with-openssl=/home/abc/openssl-1.0.1r \
      --with-zlib=/home/abc/zlib-1.2.8 \
      --with-pcre=/home/abc/pcre-8.38
      $ make
      $ sudo make install
      

      注意: 這里編譯的時候不能用相對路徑。

      配置參數使用選項:指定使用源代碼

      --with-openssl=<openssl_dir> 
      --with-pcre=<pcre_dir>
      --with-zlib=<zlib_dir>
      

      指定依賴的模塊目錄。上訴選項如果缺省,會自動找到當前系統安裝的版本。這是不希望的結果,因此需要上面的參數,使用最新的穩定版本進行編譯安裝。

      啟動Nginx

      安裝完畢后nginx沒有啟動,需要手工啟動

      $ sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
      

      測試

      啟動nginx之后,瀏覽器中輸入http://192.168.10.14(虛擬機Debian的地址) 可以驗證是否安裝啟動成功??吹綒g迎頁面那就恭喜你OK了。

      配置啟動命令

      上面還有個問題,每次啟動系統或維護打這么一長串命令不方便。因此還是要和安裝包那種一樣,啟動系統直接啟動和增加維護命令。

      自己編譯安裝的在啟動目錄/etc/init.d 中是沒有nginx的啟動文件,需要自己添加一個文件。創建一個啟動文件,把下面的啟動代碼復制進去。

      注意: 安裝路徑 nginx_location=/usr/local/nginx

      $ cat >init.d.nginx
      
      #! /bin/bash
      # chkconfig: 2345 55 25
      # Description: Startup script for nginx webserver on Debian. Place in /etc/init.d and
      # run 'update-rc.d -f nginx defaults', or use the appropriate command on your
      # distro. For CentOS/Redhat run: 'chkconfig --add nginx'
      
      ### BEGIN INIT INFO
      # Provides:          nginx
      # Required-Start:    $all
      # Required-Stop:     $all
      # Default-Start:     2 3 4 5
      # Default-Stop:      0 1 6
      # Short-Description: starts the nginx web server
      # Description:       starts nginx using start-stop-daemon
      ### END INIT INFO
      
      
      PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
      DESC="nginx daemon"
      nginx_location=/usr/local/nginx
      DAEMON=$nginx_location/sbin/nginx
      CONFIGFILE=$nginx_location/conf/nginx.conf
      PIDFILE=$nginx_location/logs/nginx.pid
      SCRIPTNAME=/etc/init.d/nginx
      
      set -e
      [ -x "$DAEMON" ] || exit 0
      
      acqNginxPid(){
          local pid
          if [ -f $PIDFILE ] ; then
              pid=`cat $PIDFILE`
              echo ${pid}
          fi
      }
      
      do_start() {
          local pid=`acqNginxPid`
          if [[ ".${pid}" == "." ]] ; then
             $DAEMON -c $CONFIGFILE 
          else
             echo -n "nginx already running"
          fi
      }
      
      do_stop() {
          local pid=`acqNginxPid`
          if [ ".${pid}" != "." ] ; then
              kill -INT ${pid}
          else
              echo -n "nginx not running"
          fi
      }
      
      do_reload() {
          local pid=`acqNginxPid`
          if [ ".${pid}" != "." ] ; then
              kill -HUP ${pid}
          else
              echo -n "nginx can't reload"
          fi
      }
      
      case "$1" in
          start)
              echo -n "Starting $DESC: $NAME"
              do_start
              echo "."
              ;;
          stop)
              echo -n "Stopping $DESC: $NAME"
              do_stop
              echo "."
              ;;
          reload|graceful)
              echo -n "Reloading $DESC configuration..."
              do_reload
              echo "."
              ;;
          restart)
              echo -n "Restarting $DESC: $NAME"
              do_stop
              do_start
              echo "."
              ;;
          *)
          echo "Usage: $SCRIPTNAME {start|stop|reload|restart}" >&2
          exit 3
          ;;
      esac
      
      exit 0
      

      復制到啟動目錄中,并增加權限。

      $ sudo cp -f init.d.nginx /etc/init.d/nginx
      $ sudo chmod +x /etc/init.d/nginx
      

      用正常維護命令測試一下,使用瀏覽器訪問可以看到效果。如果有出現啥命令找不到之類的,應該是上面的配置路徑有問題,確認一下實際的路徑和配置目錄是否一致。

      $ sudo /etc/inint.d/nginx start      # 啟動
      $ sudo /etc/inint.d/nginx stop       # 關閉
      $ sudo /etc/inint.d/nginx restart    # 重啟
      

      設置隨系統自動啟動

      命令創建完后,最后將ngix加入到rc.local文件中,這樣開機的時候nginx就默認啟動了。

      vim /etc/rc.local
      
      添加到 exit 0 的前面
      /etc/init.d/nginx start
      

      保存并退出。下次重啟就會生效,實現nginx的自啟動。,reboot可以試一下^_^。

      提示: 自動啟動下面有更新說明

      增加站點啟動配置

      在nginx.conf中增加包含配置路徑,這樣每次啟動nginx自動會加載目錄中的所有配置。這個方法是在一個服務器上部署多站點時就顯現出便利性,修改一個站點配置不會影響其他站點。

      由于是編譯安裝,全新的服務器是沒有相應的目錄,需要自己創建。

      $ sudo mkdir /etc/nginx
      $ sudo mkdir /etc/nginx/sites-enabled
      

      在http塊最下面增加一行內容配置包含目錄

      $ sudo vim /usr/local/nginx/conf/nginx.conf
      增加
      include /etc/nginx/sites-enabled/*;
      

      說明:
      為什么把路徑設置到 /etc/nginx/sites-enabled。
      是一般習慣的做法,使用apt-get 包安裝方法就會放在這個地方。當然也可以放在其他地方,為維護方便減少記憶使用標準的會比較容易找。


      補充提示:如果下載時使用wget出現無效證書錯誤,一般是沒安裝ca證書包導致的。

      安全問題

      對外暴露版本號并不是個好主意,可能有人會利用現有漏洞來攻擊。隱藏nginx的版本來降低風險。

      可以使用curl命令來看服務器頭的返回信息,第三行 Server: nginx/1.14.0,給客戶端返回的服務器版本。

      homepc@rpcsvr:~$ curl --head 127.0.0.1
      HTTP/1.1 200 OK
      Server: nginx/1.14.0
      Date: Wed, 19 Sep 2018 12:55:53 GMT
      Content-Type: text/html
      Content-Length: 612
      Last-Modified: Wed, 19 Sep 2018 07:42:17 GMT
      Connection: keep-alive
      ETag: "5ba1fdd9-264"
      Accept-Ranges: bytes
      

      隱藏版本信息比較簡單,只需編輯 nginx.conf 文件,添加一行配置

      server_tokens off;
      

      在http配置塊中插入

      homepc@rpcsvr:~$ sudo vim /usr/local/nginx/conf/nginx.conf
      
      .....
      http {
        ....
        #keepalive_timeout 0;
        keepalive_timeout  65;
        server_tokens off;
      
        #gzip on;
      
        server {
            ... ...
        }
        ....
      }
      

      重啟服務器

      homepc@rpcsvr:~$ sudo /etc/init.d/nginx restart
      Restarting nginx daemon: .
      homepc@rpcsvr:~$ curl --head 127.0.0.1
      HTTP/1.1 200 OK
      Server: nginx
      Date: Wed, 19 Sep 2018 13:09:49 GMT
      Content-Type: text/html
      

      第三行就不再出現版本信息

      補充自動啟動問題

      在部署時發現Goolge的Debin9系統下沒有rc.local文件。 在 /etc 目錄中有 rc0~rcS 這幾個文件目錄

      sunseed@rpcsvr:~$ ls /etc -l
      ...
      drwxr-xr-x 2 root root    4096 Sep 19 07:35 rc0.d
      drwxr-xr-x 2 root root    4096 Sep 19 07:35 rc1.d
      drwxr-xr-x 2 root root    4096 Sep 19 07:35 rc2.d
      drwxr-xr-x 2 root root    4096 Sep 19 08:36 rc3.d
      drwxr-xr-x 2 root root    4096 Sep 19 07:35 rc4.d
      drwxr-xr-x 2 root root    4096 Sep 19 07:35 rc5.d
      drwxr-xr-x 2 root root    4096 Sep 19 07:35 rc6.d
      drwxr-xr-x 2 root root    4096 Sep 11 18:00 rcS.d
      ...
      

      分別代表不同的級別:

      0: 關閉計算機
      1: 單用戶模式
      2: 無網絡多用戶模式
      3: 有網絡多用戶模式
      4: 保留作自定義,否則同運行級 3
      5: 同運行級 4,一般用于圖形界面(GUI)登錄(如 X的 xdm 或 KDE的 kdm)
      6: 重啟動計算機

      sunseed@rpcsvr:~$ ls /etc/rc3.d -l
      total 0
      lrwxrwxrwx 1 root root 15 Sep 11 17:59 S01acpid -> ../init.d/acpid
      ...
      lrwxrwxrwx 1 root root 15 Sep 11 17:59 S01uuidd -> ../init.d/uuidd
      lrwxrwxrwx 1 root root 17 Sep 19 08:36 S20nginx -> /etc/init.d/nginx
      

      里面一堆SXX開頭的關聯文件, S開頭即 start的參數,數字從 00 到 99,越小越優先執行

      增加Nginx啟動

      sudo ln -s /etc/init.d/nginx /etc/rc3.d/S20nginx
      sudo reboot
      

      重啟測試

      sunseed@rpcsvr:~$ curl --head 127.0.0.1
      HTTP/1.1 200 OK
      Server: nginx/1.14.0
      Date: Wed, 19 Sep 2018 09:11:10 GMT
      Content-Type: text/html
      Content-Length: 612
      Last-Modified: Wed, 19 Sep 2018 07:42:17 GMT
      Connection: keep-alive
      ETag: "5ba1fdd9-264"
      Accept-Ranges: bytes
      
      亚洲成A∨人片在线观看无码
    3. <table id="x5mq0"><track id="x5mq0"></track></table>
    4. <code id="x5mq0"><nobr id="x5mq0"><sub id="x5mq0"></sub></nobr></code>

        <pre id="x5mq0"><small id="x5mq0"><p id="x5mq0"></p></small></pre>
      1. <pre id="x5mq0"><small id="x5mq0"><track id="x5mq0"></track></small></pre>

      2. <th id="x5mq0"><video id="x5mq0"></video></th>