手動編譯安裝nginx

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

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

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

        

  二、爲nginx設置安裝目錄和啓用的模塊
服務器

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

      ./configure --prefix=/opt/demo/nginx --add-module=/home/fastdfs-nginx-module/src  --with-http_stub_status_module --with-http_ssl_moduleapp

      參數說明:負載均衡

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

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

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

      可能出現的錯誤:

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

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

        出現:SSL modules require the OpenSSL library

          解決方法:yum install openssl-devel 

  三、編譯

    執行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 –V

 

  關於nginx.conf配置文件

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

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

    示例:

#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;
        }
        
    }

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

  大概原理:

    服務器證書包含公鑰簽名(對證書內容進行hash後使用ca機構的私鑰加密)等信息瀏覽器請求發出tcp三次握手成功服務器會將證書發送給瀏覽器,瀏覽器會判斷服務器證書是否過時或被吊銷且是權威機構頒發不是符合條件會中斷訪問,並顯示警告提示;若是符合的話會產生一個隨機字符串並用服務器證書中的公鑰加密發送給服務器端,服務器經過本身的私鑰解密那個隨機字符串將這個字符串做爲加密的密碼來進行對稱加密以後與瀏覽器交互的數據;

 

   關於瀏覽器怎樣判斷服務器證書是否爲權威機構頒發:

首先要知道一下幾個事情

服務器證書是受信任的ca機構簽發的

ca機構自己也是有證書的(存在公鑰和私鑰)

瀏覽器自己內置了受信任的ca機構的證書(有公鑰)

服務器證書當中存在"簽名"

證書中的"簽名"是對服務器證書內容進行hash後使用ca機構的私鑰加密造成的

當客戶端接收到了服務器證書以後,會根據證書的內容進行散列計算獲得證書內容的hash值,還會經過瀏覽器內置的證書(ca)提供的公鑰對簽名進行解密.

若是解密獲得的內容等於前面散列出的hash值,則說明證書是權威機構頒發的

相關文章
相關標籤/搜索