linux環境手動編譯安裝Nginx實踐過程 附異常解決

爲何選擇Nginx

Nginx 是一個很牛的高性能Web和反向代理服務器, 它具備有不少很是優越的特性:html

      • 在高鏈接併發的狀況下,Nginx是Apache服務器不錯的替代品:
        Nginx在美國是作虛擬主機生意的老闆們常常選擇的軟件平臺之一. 可以支持高達 50,000 個併發鏈接數的響應, 感謝Nginx爲咱們選擇了 epoll and kqueue 做爲開發模型.
      • Nginx做爲負載均衡服務器:
        Nginx 既能夠在內部直接支持 Rails 和 PHP 程序對外進行服務, 也能夠支持做爲 HTTP代理 服務器對外進行服務. Nginx採用C進行編寫, 不管是系統資源開銷仍是CPU使用效率都比 Perlbal 要好不少.
      • 做爲郵件代理服務器:
        Nginx 同時也是一個很是優秀的郵件代理服務器(最先開發這個產品的目的之一也是做爲郵件代理服務器), Last.fm 描述了成功而且美妙的使用經驗.
      • Nginx 是一個 [#installation 安裝] 很是的簡單 , 配置文件 很是簡潔(還可以支持perl語法), Bugs 很是少的服務器:
        Nginx 啓動特別容易, 而且幾乎能夠作到7*24不間斷運行,即便運行數個月也不須要從新啓動. 你還可以 不間斷服務的狀況下進行軟件版本的升級

實踐安裝過程

一、下載nginx源碼包並解壓nginx

     可在http://nginx.org/en/download.html下載.tar.gz的源碼包,如(nginx-1.4.7.tar.gz)瀏覽器

或者使用雲盤下載   http://url.cn/5kRqr3n   (密碼:f72dcD)服務器

     下載後經過tar -xvzf 進行解壓,解壓後的nginx目錄結構以下:session

        

二、爲nginx設置安裝目錄和啓用的模塊併發

     切換到解壓後的nginx目錄中執行:app

      ./configure --prefix=/opt/demo/nginx --add-module=/home/fastdfs-nginx-module/src  --with-http_stub_status_module --with-http_ssl_module負載均衡

      參數說明:tcp

        --prefix 用於指定nginx編譯後的安裝目錄性能

        --add-module 爲添加的第三方模塊,這次添加了fdfs的nginx模塊

        --with..._module 表示啓用的nginx模塊,如此處啓用了http_ssl_module模塊

安裝說明:

--add-module=/home/fastdfs-nginx-module/src 指定安裝fastdfs文件服務器模塊,因此安裝先需先安裝好fastdfs並指向對應的目錄,不然會提示fastdfs安裝目錄不存在。也能夠不安裝fastdfs模塊,只須要刪除這塊命令 --prefix=/opt/demo/nginx --add-module=/home/fastdfs-nginx-module/src

--with-http_stub_status_module --with-http_ssl_module 須要啓動https模塊,因此安裝前須要檢查是否已經安裝好ssl模塊,若是還沒有安裝請執行如下命令:yum install mod_ssl

安裝完mod_ssl會建立一個默認的SSL證書,路徑位於/etc/pki/tls,安裝完成不表明已經配置並生成對應的key,只是表示本地環境支持ssl了.可是這裏的安裝Nginx命令只須要配置好ssl便可。也能夠不安裝這個模塊,即刪除   --with-http_stub_status_module --with-http_ssl_module

 

      可能出現的錯誤:

        出現:./configure:  error: the HTTP rewrite module requires the PCRE library.

          解決方法:安裝pcre-devel解決問題 yum -y install pcre-devel

        出現:SSL modules require the OpenSSL library

          解決方法:yum install openssl-devel 

                            出現:./configure: error: the HTTP cache module requires md5 functions

from OpenSSL library.   You can either disable the module by using
--without-http-cache option, or install the OpenSSL library into the system,
or build the OpenSSL library statically from the source with nginx by using
--with-http_ssl_module --with-openssl=<path> options.

      解決方法:yum  -y install openssl openssl-devel

當無異常並能正常解壓後的正常反饋是

Configuration summary  
  + using system PCRE library  
  + using system OpenSSL library  
  + md5: using OpenSSL library  
  + sha1: using OpenSSL library  
  + using system zlib library  
  + jemalloc library is disabled  
  
  nginx path prefix: "/usr/local/nginx"  
  nginx binary file: "/usr/local/nginx/sbin/nginx"  
  nginx configuration prefix: "/usr/local/nginx/conf"  
  nginx configuration file: "/usr/local/nginx/conf/nginx.conf"  
  nginx pid file: "/usr/local/nginx/logs/nginx.pid"  
  nginx error log file: "/usr/local/nginx/logs/error.log"  
  nginx http access log file: "/usr/local/nginx/logs/access.log"  
  nginx http client request body temporary files: "client_body_temp"  
  nginx dso module path: "/usr/local/nginx/modules/"  
  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 進行編譯,若是編譯成功的話會在第一步中objs中出現一個nginx文件

      特別注意:

        在已安裝的nginx上進行添加模塊的話執行到這裏就好了,把objs中的nginx替換掉以前的安裝的nginx/sbin/中的nginx文件,而後重啓nginx就好了,若是執行下一步的install,會致使以前安裝的nginx被覆蓋,好比以前配置好的nginx.conf文件)

 

四、安裝

    執行make install 進行安裝,安裝後--prefix 中指定的安裝目錄下回出現以下目錄結構

 

五、啓動nginx

    切入到第四步中的sbin目錄或是建立一個nginx軟連接

        ln -s /opt/demo/nginx/sbin/nginx /usr/bin/nginx

      完成後執行:

        nginx start(如需開機自啓,可在/etc/rc.d/rc.local 文件中添此命令)

      如出現:nginx: [error] invalid PID number "" in "/usr/local/nginx/logs/nginx.pid"

      則需經過nginx –c ../conf/nginx.conf    命令指定nginx的配置

 

    nginx的一些經常使用管理命令

      重啓:nginx -s reload

      中止:nginx -s stop或者是經過kill nginx進程號

                  檢測配置文件是否合法:nginx -t

      查看版本:nginx –V

關於nginx.conf配置文件

    在安裝完nginx後會在conf目錄中產生一個nginx.conf的配置文件

    裏面有些默認配置,可根據本身的需求進行更改

        示例1:

server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
          proxy_pass http://www.baidu.com; #當Nginx監控到80端口有請求過來時進行調整到百度首頁去
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

 

 

    示例2:

#user  nobody;
worker_processes  1;
events {
     use epoll;
        worker_connections  51200;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    proxy_connect_timeout 600s;
    proxy_read_timeout 600s;
    proxy_send_timeout 600s;
    proxy_buffer_size 64k;
    proxy_buffers 4 32k;
    proxy_busy_buffers_size 64k;
    proxy_temp_file_write_size 64k;
    proxy_ignore_client_abort on;
    client_max_body_size 200m;  #此參數在使用fdfs上傳可控制上傳文件的大小
   #日誌的輸出格式,如需打印請求的body參數信息,可在$body_bytes_sent後添加 $request_body 
   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  logs/access.log  main; #設置日誌輸出的位置
  access_log on;  #是否開啓日誌,開啓on,關閉off
  #負載均衡配置
  upstream test.com {
    ip_hash;
    server 192.168.68.9:8080;
    server 192.168.68.72:8080;
   }
    server {
        listen       80; #監聽的端口,http默認監聽端口爲80
        server_name  localhost; #監聽的主機名
        location / {
        #設置請求的頭部中主機名爲請求的主機名,而不是代理的nginx的主機名
        proxy_set_header Host $host:$server_port;
        #代理的目標地址,若是要進行負載均衡,目標地址可添test.com
         proxy_pass http://192.168.68.9:8080;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
   #https配置,https默認監聽端口爲443
    server {
        listen  443;
        server_name system.test.com;
        ssl on;
        ssl_certificate_key cert/system.key; #ssl key文件的位置,此處使用配置文件的相對路徑
        ssl_certificate cert/system.pem; #證書文件,此處爲阿里云云盾證書生成的.pem也可修改擴展名爲熟悉的.crt
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        location / {
             proxy_pass http://192.168.68.9:8080;
        }
    }
    #如下爲個人fdfs文件配置,沒有使用fdfs能夠不用配置
    server {
        listen       9300;        
        server_name  localhost;   
    #location /group1/M01 {
         #   root   /home/fdfs/storage2/data;
          #  ngx_fastdfs_module;         
        #}
        
        location /group1/M00 {
           root   /home/fdfs/storage1/data;
           ngx_fastdfs_module;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
#include vhost/*.conf;
}

關於https配置ssl

    若是在安裝nginx的時候沒有安裝 --with-http_ssl_module模塊要先安裝該模塊

    nginx –V 可查看已經安裝的模塊

    若是沒有安裝,只需執行以上步驟中的二、3步進行手動添加ssl模塊

    添加一個https的server大概以下面這個樣子

server {
         listen 443;   ##默認的監聽端口爲443
         server_name  localhost;
         ssl on;
         ssl_certificate_key  xxx.key; ##私鑰
         ssl_certificate  xxx.crt; ##證書,證書中包含公鑰和私鑰加密後的簽名信息
 
        location / {
            root   html;
            index  index.html index.htm;
             proxy_pass http://xxx.xxx.xxx.xxx:xxx;
        }
         
    }

私鑰和公鑰爲非對稱加密方式加密內容,即公鑰加密後的內容只有私鑰可解,私鑰加密後的內容只有公鑰可解;

  大概原理:

    證書中包含公鑰和用私鑰加密後的簽名信息,瀏覽器請求發出tcp三次握手成功後服務器會將該證書發送給瀏覽器,瀏覽器經過證書中的公鑰解密私鑰加密後的簽名,再經過解密後的簽名來匹配瀏覽器中內置的權威簽名證書來判斷該簽名是否權威,不是權威簽名會中斷訪問,並顯示警告提示;若是判斷爲權威機構的簽名後會產生一個隨機字符串並用證書中的公鑰加密發送給服務器端,服務器再經過本身的私鑰解密那個隨機字符串,將這個字符串做爲加密的密碼來進行對稱加密以後與瀏覽器交互的數據;

相關文章
相關標籤/搜索