Nginx使用記錄

配置常看法釋:javascript

########### 每一個指令必須有分號結束。#################
#user administrator administrators;  #配置用戶或者組,默認爲nobody。
worker_processes  2; #容許生成的進程數,默認爲1
#pid /nginx/pid/nginx.pid;   #指定nginx進程運行文件存放地址,默認存在logs/nginx.pid
error_log logs/error.log error;  #制定日誌路徑,級別。這個設置能夠放入全局塊,http塊,server塊,級別以此爲:debug|info|notice|warn|error|crit|alert|emerg
events {
    accept_mutex on;   #設置網路鏈接序列化,防止驚羣現象發生,默認爲on
    multi_accept on;  #設置一個進程是否同時接受多個網絡鏈接,默認爲off
    #use epoll;      #事件驅動模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024;    #最大鏈接數,默認爲512
}


http {
    include       mime.types;    #文件擴展名與文件類型映射表
    default_type  application/octet-stream;    #默認文件類型,默認爲text/plain
    #access_log off; #取消服務日誌        
    log_format myFormat '$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 myFormat;  #combined爲日誌格式的默認值

    sendfile        on;    #容許sendfile方式傳輸文件,默認爲off,能夠在http塊,server塊,location塊。
    #sendfile_max_chunk 0;  #每一個進程每次調用傳輸數量不能大於設定的值,默認爲0,即不設上限。
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;    #鏈接超時時間,默認爲75s,能夠在http,server,location塊。

    #upstream mysvr {            #服務器列表,用於負載均衡等
      #server 127.0.0.1:7878;
      #server 192.168.10.121:3333 backup;  #熱備
    #}

    #gzip  on;
server {
    listen       80;
        server_name  www.aaa.con aaa.con; #多個站點使用空格隔開
        location / {
         proxy_pass   http://www.aaa.con:8087/proj1/;
        }
     location /proj1/ {
         proxy_pass   http://www.aaa.con:8087/proj1/;
    }
}
 
 
server {
  listen 80; 
  server_name www.bbb.con bbb.con; 
  location / { 
    proxy_pass http://www.aaa.con:8087/proj2/;
  }

  location /proj2/ {
    proxy_pass http://www.aaa.con:8087/proj2/;
 
 
  }
 }
}

注意:以上80端口能夠映射到兩個地址,多個地址也同樣html

這段配置的意思是訪問www.aaa.com或者aaa.com的請求,會被nginx映射到http://www.aaa.con:8087/proj1/;而訪問www.bbb.com或者bbb.com的請求,會被映射到http://www.aaa.con:8087/proj2/。多配置location /proj1/的緣由是避免CSS/js等在html中設置了項目名路徑的資源由於nginx的反向代理形成丟失工程名而沒法訪問到資源。
java

      這樣,咱們就可以在一臺機器上發佈針對若干個域名的WEB服務了。nginx

 

注:有些應用必須設置proxy_set_header屬性,不然沒法正常使用(好比使用dwr框架的javaee應用),示例:git

 

server {  
    listen       80;  
    server_name  *.a.com;  
    location / {  
        proxy_pass http://localhost:8080/projectA/;  
        proxy_set_header   Host    $host;  
        proxy_set_header   X-Real-IP   $remote_addr;  
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;  
    }  
} 

 

緣由以下:github

 

nginx爲了實現反向代理的需求而增長了一個ngx_http_proxy_module模塊。其中proxy_set_header指令就是該模塊須要讀取的配置文件。在這裏,全部設置的值的含義和http請求同中的含義徹底相同,除了Host外還有X-Forward-For。
        Host的含義是代表請求的主機名,由於nginx做爲反向代理使用,而若是後端真是的服務器設置有相似防盜鏈或者根據http請求頭中的host字段來進行路由或判斷功能的話,若是反向代理層的nginx不重寫請求頭中的host字段,將會致使請求失敗【默認反向代理服務器會向後端真實服務器發送請求,而且請求頭中的host字段應爲proxy_pass指令設置的服務器】。
        同理,X_Forward_For字段表示該條http請求是有誰發起的?若是反向代理服務器不重寫該請求頭的話,那麼後端真實服務器在處理時會認爲全部的請求都來在反向代理服務器,若是後端有防攻擊策略的話,那麼機器就被封掉了。所以,在配置用做反向代理的nginx中通常會增長兩條配置,修改http的請求頭:
proxy_set_header Host $http_host;
proxy_set_header X-Forward-For $remote_addr;


這裏的$http_host和$remote_addr都是nginx的導出變量,能夠再配置文件中直接使用。若是Host請求頭部沒有出如今請求頭中,則$http_host值爲空,可是$host值爲主域名。所以,通常而言,會用$host代替$http_host變量,從而避免http請求中丟失Host頭部的狀況下Host不被重寫的失誤。

 

使用rewrite能夠將80端口映射到443去小程序

 

#80 rewrite to 443
    server {
    listen 80; #監聽的端口
    server_name xxx.ttt.com;   #監聽的域名,多個使用空格隔開
    rewrite ^(.*) https://$server_name$1 permanent;  #80映射到443端口
    }
    server {
        listen       443;
        server_name  localhost;
    ssl    on;
    ssl_certificate    xxx.ttt.com_bundle.crt;
    ssl_certificate_key    xxx.ttt.com.key;
    ssl_session_timeout    20m;
    #ssl_protocols    SSLv3 TLSv1;
    #ssl_ciphers    HIGH:!ADH:!EXPORT56:RC4+RSA:+MEDIUM;
    ssl_prefer_server_ciphers    on;
     
    location / {
            proxy_pass  https://xxx.ttt.com;
        }

 

安裝爲Windows 服務:後端

需使用開源的winsw工具https://github.com/kohsuke/winsw,下載對應的winsw。服務器

注意:安裝不成功的時候,多是因爲沒有安裝.net framework.網絡

參照:http://www.cnblogs.com/edisonchou/p/4126742.html

(4)每次以cmd方式啓動Nginx服務不符合實際要求,因而咱們想到將其註冊爲Windows服務,並設置爲自動啓動模式。這裏,咱們使用一個不錯的小程序:「Windows Service Wrapper」,將nginx.exe註冊爲Windows服務,具體的步湊以下:

  ①下載最新版的 Windows Service Wrapper 程序,好比我下載的名稱是 "winsw-1.8-bin.exe"(本文底部有下載地址),而後把它命名成你想要的名字(好比: "nginx-service.exe",固然,你也能夠不更名)

  ②將重命名後的 nginx-service.exe 複製到 nginx 的安裝目錄(好比,我這裏是 "D:\Servers\nginx-1.4.7")

  ③在同一個目錄下建立一個Windows Service Wrapper 的XML配置文件,名稱必須與第一步重命名時使用的名稱一致(好比我這裏是 "nginx-service.xml",  若是,你沒有重命名,則應該是 "winsw-1.8-bin.xml"),這個XML的內容以下:

複製代碼
<?xml version="1.0" encoding="UTF-8" ?>
<service>
<id>nginx</id>
<name>Nginx Service</name>
<description>High Performance Nginx Service</description>
<executable>D:\Servers\nginx-1.4.7\nginx.exe</executable>
<logpath>D:\Servers\nginx-1.4.7\</logpath>
<logmode>roll</logmode>
<depend></depend>
<startargument>-p D:\Servers\nginx-1.4.7</startargument>
<stopargument>-p D:\Servers\nginx-1.4.7 -s stop</stopargument>
</service>
複製代碼

  ④在命令行下執行如下命令,以便將其註冊成Windows服務:nginx-service.exe install

  ⑤接下來就能夠在Windows服務列表看到Nginx服務了,這裏咱們能夠將其設置爲自動啓動了:

  (5)總結:在Windows環境中,要對外提供的Windows服務通常都要將其啓動類型設置爲自動

相關文章
相關標籤/搜索