1. 程式人生 > >Nginx環境搭建以及一些基本配置

Nginx環境搭建以及一些基本配置

Nginx環境搭建

listen       8889;		監聽埠,如果配置多個server的時候,埠需要配置不一樣
server_name  192.168.0.52;		# Nginx中的server_name指令主要用於配置基於名稱的虛擬主機,server_name指令在接到請求後的匹配順序

#配置啟動程序(和CPU總核數一致)
worker_processes  1;
#charset koi8-r;

#一個nginx程序開啟的最多檔案描述數目,理論值應該是最多開啟檔案數(系統的值ulimit -u)建議與ulimit -u的值一致
worker_rlimit_nofile 65535;

#access_log  logs/host.access.log  main;

Linux 檢視CPU總核數

# 總核數 = 物理CPU個數 X 每顆物理CPU的核數
# 總邏輯CPU數 = 物理CPU個數 X 每顆物理CPU的核數 X 超執行緒數

# 檢視物理CPU個數
cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l

# 檢視每個物理CPU中core的個數(即核數)
cat /proc/cpuinfo| grep "cpu cores"| uniq

# 檢視邏輯CPU的個數
cat /proc/cpuinfo| grep "processor"| wc -l

Nginx 安裝

編譯
./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/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_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
Fastdfs模組新增編譯
./configure --prefix=/usr/local/nginx --add-module=../fastdfs-nginx-module/src/ --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/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_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

http 服務配置

    NGNIX開啟壓縮:
    	gzip on;
    	gzip_buffers 4 8k;
        #壓縮級別
    	gzip_comp_level 2;
        #超過20壓縮
    	gzip_min_length 20;
    	gzip_proxied off;
    	gzip_types text/css;
    	gzip_vary off;

    location / {	匹配路徑
        root   html;	匹配當前路徑的時候,會到這個html的資料夾下匹配
        index  index.html index.htm;	當沒有指定主頁的時候,預設選擇這個指定的檔案
        proxy_pass http://192.168.0.52:35840	代理路徑,相當於轉發
    }

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

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}

Nginx Server 配置

server {
    listen       80;
    server_name  ethio-play.com;
    # 永久重定向配置 301
    rewrite ^(.*) http://www.ethio-play.com$1 permanent;
}
nginx自動匹配多級域名配置
server {
    listen       80;
    server_name  ~^(?<subdomain>\w+)\.yourdomain\.com$;
    root   html/$subdomain;
    index  index.html index.htm index.php;
    fastcgi_intercept_errors on;
    error_page  404      = /404.html;
    location / {
            # This is cool because no php is touched for static content.
            # include the "?$args" part so non-default permalinks doesn't
            # break when using query string
            try_files $uri $uri/ =404;
   }

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

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param  domain $subdomain;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    location ~ /\.ht {
        deny  all;
    }
}

配置反向代理

location ~ \.jsp$ {  	配置JSP頁面又tomcat處理
    proxy_pass http://localhost:8080;
}
location ~ \.(html|js|css|png|gif)$ {  	配置一些靜態資源有nginx處理
    root D:/software/developerTools/server/apache-tomcat-7.0.8/webapps/ROOT;
}

配置多個靜態私服

* server外添加了一個upstream,而直接在proxy_pass裡面直接用http://+upstream的名稱來使用, upstream中的server元素必須要注意,不能加http://,但proxy_pass中必須加
upstream local_tomcat {
	server localhost:8080 weight=1;	配置多個私服,weight值越大請求得到的機會越大
	server localhost:9999 weight=5;	配置多個私服,weight值越大請求得到的機會越大
}
server{
    location / {
       proxy_pass http://local_tomcat;
    }
    #......其他省略
}

nginx正則表示式:

eg:
語法:location [=|~|~*|^~] /uri/ { … }
注意:
 ~* 字首選擇不區分大小寫的匹配
 ~ 選擇區分大小寫的匹配
 例子:
location = / {
# 只匹配 / 查詢。
[ configuration A ]
}

location / {
# 匹配任何查詢,因為所有請求都已 / 開頭。但是正則表示式規則和長的塊規則將被優先和查詢匹配。
[ configuration B ]
}

location ^~ /images/ {
# 匹配任何已 /images/ 開頭的任何查詢並且停止搜尋。任何正則表示式將不會被測試。
[ configuration C ]
}

location ~* \.(gif|jpg|jpeg)$ {
# 匹配任何已 gif、jpg 或 jpeg 結尾的請求。然而所有 /images/ 目錄的請求將使用 Configuration C。
[ configuration D ]
}
Nginx正則表示式location匹配:
location ^~ /business/
{
	#root
	alias	D:\\apidoc\\portal\\business\\apidocs\\;
	#expires定義使用者瀏覽器快取的時間為7天,如果靜態頁面不常更新,可以設定更長,這樣可以節省頻寬和緩解伺服器的壓力
	#expires      7d;
}
root 和 alias區別:
eg:http://localhost:8079/business/index.html
alias也是用來設定檔案資源路徑的,他與root不同點就是在於如何解讀跟location後面的URL引數
1.使用alias的時候,他會將URL中的business部分丟掉,請求路徑會變為D:\\apidoc\\portal\\business\\apidocs\\index.html
2.使用root的時候,business不會丟棄掉,他會使用完整的url來匹配,請求路徑會變為D:\\apidoc\\portal\\business\\apidocs\\business/index.html

Nginx 正則規則表示式

~      為區分大小寫的匹配。
~*     不區分大小寫的匹配(匹配firefox的正則同時匹配FireFox)。
!~     不匹配的
!~*    不匹配的

.     匹配除換行符以外的任意字元
\w     匹配字母或數字或下劃線或漢字
\s     匹配任意的空白符
\d     匹配數字
\b     匹配單詞的開始或結束
^     匹配字串的開始
$     匹配字串的結束
*     重複零次或更多次
+     重複一次或更多次
?     重複零次或一次
{n}     重複n次
{n,}     重複n次或更多次
{n,m}     重複n到m次
*?     重複任意次,但儘可能少重複
+?     重複1次或更多次,但儘可能少重複
??     重複0次或1次,但儘可能少重複
{n,m}?     重複n到m次,但儘可能少重複
{n,}?     重複n次以上,但儘可能少重複

\W     匹配任意不是字母,數字,下劃線,漢字的字元
\S     匹配任意不是空白符的字元
\D     匹配任意非數字的字元
\B     匹配不是單詞開頭或結束的位置
[^x]     匹配除了x以外的任意字元
[^aeiou]     匹配除了aeiou這幾個字母以外的任意字元

捕獲     (exp)     匹配exp,並捕獲文字到自動命名的組裡
(?<name>exp)     匹配exp,並捕獲文字到名稱為name的組裡,也可以寫成(?'name'exp)
(?:exp)     匹配exp,不捕獲匹配的文字,也不給此分組分配組號
零寬斷言     (?=exp)     匹配exp前面的位置
(?<=exp)     匹配exp後面的位置
(?!exp)     匹配後面跟的不是exp的位置
(?<!exp)     匹配前面不是exp的位置

Nginx命令:

cd nginx安裝目錄:
#執行 		 start nginx
#重啟 		 nginx -s reload
#檢視配置是否生效	nginx -t
#關閉服務	  nginx -s stop