Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
nicode 聯(lián)盟(Unicode Consortium)
Unicode 聯(lián)盟(Unicode Consortium)開發(fā)了 Unicode 標(biāo)準(zhǔn)(Unicode Standard)。他們的目標(biāo)是使用標(biāo)準(zhǔn)的 Unicode 轉(zhuǎn)換格式(即 UTF,全稱 Unicode Transformation Format)取代現(xiàn)有的字符集。
Unicode 標(biāo)準(zhǔn)是一個(gè)成功的創(chuàng)舉,在 HTML、XML、Java、JavaScript、E-mail、ASP、PHP 中都得到實(shí)現(xiàn)。Unicode 標(biāo)準(zhǔn)也得到許多操作系統(tǒng)和所有現(xiàn)代瀏覽器的支持。
Unicode 聯(lián)盟與領(lǐng)先的標(biāo)準(zhǔn)開發(fā)組織合作,這些組織有 ISO、W3C 和 ECMA。
Unicode 字符集
Unicode 可以由不同的字符集實(shí)現(xiàn)。最常用的編碼是 UTF-8 和 UTF-16:
字符集 | 描述 |
---|---|
UTF-8 | UTF8 中的字符可以是 1 到 4 字節(jié)長(zhǎng)。UTF-8 可以代表 Unicode 標(biāo)準(zhǔn)中的任何字符。UTF-8 向后兼容 ASCII。UTF-8 是電子郵件和網(wǎng)頁(yè)的首選編碼。 |
UTF-16 | 16 位 Unicode 轉(zhuǎn)換格式是一種可變長(zhǎng)度的 Unicode 字符編碼,能夠編碼整個(gè) Unicode 指令表。UTF-16 主要用于操作系統(tǒng)和環(huán)境,如 Microsoft Windows、Java 和 .NET。 |
提示:Unicode 的前 128 個(gè)字符(與 ASCII 一一對(duì)應(yīng))使用一個(gè)與 ASCII二進(jìn)制值相同的八位組進(jìn)行編碼,使有效的 ASCII 文本在進(jìn)行 UTF-8 編碼時(shí)也是有效的。
提示:所有的 HTML 4 處理器支持 UTF-8,所有的 HTML 5 和 XML 處理器支持 UTF-8 和 UTF-16!
HTML5 標(biāo)準(zhǔn):Unicode UTF-8
因?yàn)?ISO-8859 中字符集大小是有限的,且在多語(yǔ)言環(huán)境中不兼容,所以 Unicode 聯(lián)盟開發(fā)了 Unicode 標(biāo)準(zhǔn)。
Unicode 標(biāo)準(zhǔn)覆蓋了(幾乎)所有的字符、標(biāo)點(diǎn)符號(hào)和符號(hào)。
Unicode 使文本的處理、存儲(chǔ)和運(yùn)輸,獨(dú)立于平臺(tái)和語(yǔ)言。
HTML-5 中默認(rèn)的字符編碼是 UTF-8。
下面列出了一些 HTML5 支持的 UTF-8 字符集:
字符集 | 十進(jìn)制 | 十六進(jìn)制 |
---|---|---|
C0 控制與基本的 Latin(C0 Controls and Basic Latin) | 0-127 | 0000-007F |
C1 控制與 Latin-1 的補(bǔ)充(C1 Controls and Latin-1 Supplement) | 128-255 | 0080-00FF |
Latin 擴(kuò)展 A(Latin Extended-A) | 256-383 | 0100-017F |
Latin 擴(kuò)展 B(Latin Extended-B) | 384-591 | 0180-024F |
如果 HTML5 網(wǎng)頁(yè)使用不同于 UTF-8 的字符,則需要在 <meta> 標(biāo)簽中指定,如下:
實(shí)例
<meta charset="ISO-8859-1">
如您還有不明白的可以在下面與我留言或是與我探討QQ群308855039,我們一起飛!
在前端開發(fā)中,為了讓中文在不同的環(huán)境下都能很好的顯示,一般是將中文轉(zhuǎn)化為unicode格式,即\u4f60,比如:"你好啊"的unicode編碼為"\u4f60\u597d\u554a"。
JS里將中文轉(zhuǎn)為unicode編碼很簡(jiǎn)單。
function convert2Unicode(str) {
return str.replace(/[\u0080-\uffff]/g,
function($0) {
var tmp = $0.charCodeAt(0).toString(16);
return "\u" + new Array(5 - tmp.length).join('0') + tmp;
});
}
反轉(zhuǎn)也很簡(jiǎn)單,直接alert出來或者innerHTML到dom節(jié)點(diǎn)里都可以。
但如果將\u4f60\u597d\u554a"字符傳遞給php,php就不能直接echo或者其他操作了。直接echo的話還是原生的字符,不能自動(dòng)轉(zhuǎn)化為中文。
在php5.0及以上版本中提供了json_encode, json_decode方法。在使用json_encode變量的時(shí)候,如果變量里含有中文的話,會(huì)將中文轉(zhuǎn)為unicode格式。所以在想是否可以通過json_decode將unicode轉(zhuǎn)為中文呢?實(shí)際測(cè)試發(fā)現(xiàn)是可以的,但對(duì)單一的字符串發(fā)現(xiàn)有些問題。
對(duì)于簡(jiǎn)單的字符串,發(fā)現(xiàn)有時(shí)候使用json_decode轉(zhuǎn)的化,結(jié)果直接為空了。但將字符串替換為數(shù)組然后在轉(zhuǎn)就可以了。下面為封裝的代碼:
function unicode2utf8($str){
if(!$str) return $str;
$decode = json_decode($str);
if($decode) return $decode;
$str = '["' . $str . '"]';
$decode = json_decode($str);
if(count($decode) == 1){
return $decode[0];
}
return $str;
}
使用這個(gè)方法可以很好的將unicode編碼轉(zhuǎn)為utf-8編碼。
js將漢字轉(zhuǎn)為實(shí)體字符:
function convert2Entity(str) {
var len = str.length;
var re = [];
for (var i = 0; i < len; i++) {
var code = str.charCodeAt(i); if (code > 256) {
re.push('' + code + ';');
} else {
re.push(str.charAt(i));
}
}
return re.join('');
}
php將實(shí)體字符轉(zhuǎn)為utf-8漢字的方法:
function entity2utf8onechar($unicode_c){
$unicode_c_val = intval($unicode_c);
$f=0x80; // 10000000
$str = "";
// U-00000000 - U-0000007F: 0xxxxxxx
if($unicode_c_val <= 0x7F){ $str = chr($unicode_c_val); } //U-00000080 - U-000007FF: 110xxxxx 10xxxxxx else if($unicode_c_val >= 0x80 && $unicode_c_val <= 0x7FF){ $h=0xC0; // 11000000 $c1 = $unicode_c_val >> 6 | $h;
$c2 = ($unicode_c_val & 0x3F) | $f;
$str = chr($c1).chr($c2);
}
//U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
else if($unicode_c_val >= 0x800 && $unicode_c_val <= 0xFFFF){ $h=0xE0; // 11100000 $c1 = $unicode_c_val >> 12 | $h;
$c2 = (($unicode_c_val & 0xFC0) >> 6) | $f;
$c3 = ($unicode_c_val & 0x3F) | $f;
$str=chr($c1).chr($c2).chr($c3);
}
//U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
else if($unicode_c_val >= 0x10000 && $unicode_c_val <= 0x1FFFFF){ $h=0xF0; // 11110000 $c1 = $unicode_c_val >> 18 | $h;
$c2 = (($unicode_c_val & 0x3F000) >>12) | $f;
$c3 = (($unicode_c_val & 0xFC0) >>6) | $f;
$c4 = ($unicode_c_val & 0x3F) | $f;
$str = chr($c1).chr($c2).chr($c3).chr($c4);
}
//U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
else if($unicode_c_val >= 0x200000 && $unicode_c_val <= 0x3FFFFFF){ $h=0xF8; // 11111000 $c1 = $unicode_c_val >> 24 | $h;
$c2 = (($unicode_c_val & 0xFC0000)>>18) | $f;
$c3 = (($unicode_c_val & 0x3F000) >>12) | $f;
$c4 = (($unicode_c_val & 0xFC0) >>6) | $f;
$c5 = ($unicode_c_val & 0x3F) | $f;
$str = chr($c1).chr($c2).chr($c3).chr($c4).chr($c5);
}
//U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
else if($unicode_c_val >= 0x4000000 && $unicode_c_val <= 0x7FFFFFFF){ $h=0xFC; // 11111100 $c1 = $unicode_c_val >> 30 | $h;
$c2 = (($unicode_c_val & 0x3F000000)>>24) | $f;
$c3 = (($unicode_c_val & 0xFC0000)>>18) | $f;
$c4 = (($unicode_c_val & 0x3F000) >>12) | $f;
$c5 = (($unicode_c_val & 0xFC0) >>6) | $f;
$c6 = ($unicode_c_val & 0x3F) | $f;
$str = chr($c1).chr($c2).chr($c3).chr($c4).chr($c5).chr($c6);
}
return $str;
}
function entities2utf8($unicode_c){
$unicode_c = preg_replace("/\&\#([\da-f]{5})\;/es", "entity2utf8onechar('\\1')", $unicode_c);
return $unicode_c;
}
entity2utf8onechar方法來自 http://blog.sina.com.cn/s/blog_48d7f3f40100o6ak.html
使用方式:
$utf8chars = entities2utf8("啊你好啊");
本文鏈接:http://www.welefen.com/php-unicode-to-utf8.html
者:小不點(diǎn)啊
來源:www.cnblogs.com/leeSmall/p/9356535.html
一、Nginx Rewrite 規(guī)則
Rewrite規(guī)則含義就是某個(gè)URL重寫成特定的URL(類似于Redirect),從某種意義上說為了美觀或者對(duì)搜索引擎友好,提高收錄量及排名等。
語(yǔ)法:
rewrite <regex> <replacement> [flag]
關(guān)鍵字 || 正則 || 替代內(nèi)容 || flag標(biāo)記
Rewrite規(guī)則的flag標(biāo)記主要有以下幾種:
last和break用來實(shí)現(xiàn)URL重寫,瀏覽器地址欄URL地址不變
a) 例如用戶訪問www.dbspread.com,想直接跳轉(zhuǎn)到網(wǎng)站下面的某個(gè)頁(yè)面,www.dbspread.com/new.index.html如何來實(shí)現(xiàn)呢?我們可以使用Nginx Rewrite 來實(shí)現(xiàn)這個(gè)需求,具體如下:在server中加入如下語(yǔ)句即可:
效果圖如下:
rewrite ^/$ http://www.dbspread.com/new.index.html permanent;
對(duì)應(yīng)如下語(yǔ)法:
rewrite <regex> <replacement> [flag];
關(guān)鍵字 正則 替代內(nèi)容 flag標(biāo)記
正則表達(dá)式說明:
*代表前面0或更多個(gè)字符 +代表前面1或更多個(gè)字符
?代表前面0或1個(gè)字符 ^代表字符串的開始位置
$代表字符串結(jié)束的位置 。為通配符,代表任何字符
b)例如多個(gè)域名跳轉(zhuǎn)到同一個(gè)域名,nginx rewrite規(guī)則寫法如下:
格式:
rewrite <regex> <replacement> [flag];
關(guān)鍵字 || 正則 || 替代內(nèi)容 || flag標(biāo)記
說明:
比如http://www.dbspread.com/download/av123.rmvb 這個(gè)視頻下載地址被其他網(wǎng)站引用,比如在www.test.com的index.html引用download/av123.rmvb就叫盜鏈,我們要禁止這種引用就叫做防盜鏈
在nginx的nginx.conf的server里面配置如下代碼
三、Nginx 動(dòng)靜分離
Nginx動(dòng)靜分離是讓動(dòng)態(tài)網(wǎng)站里的動(dòng)態(tài)網(wǎng)頁(yè)根據(jù)一定規(guī)則把不變的資源和經(jīng)常變的資源區(qū)分開來,動(dòng)靜資源做好了拆分以后,我們就可以根據(jù)靜態(tài)資源的特點(diǎn)將其做緩存操作,這就是網(wǎng)站靜態(tài)化處理的核心思路。
1). WEB項(xiàng)目開發(fā)時(shí)要注意,將靜態(tài)資源盡量放在一個(gè)static文件夾2). 將static靜態(tài)資源文件夾放到Nginx可以取到的位置3). 頁(yè)面要建立全局變量路徑,方便修改路徑4). 修改nginx.conf的location, 匹配靜態(tài)資源請(qǐng)求
body {
margin: 10px 20px;
text-align: center;
font-family: Arial, sans-serif;
background-color: red;
}
4.4 在nginx的nginx.conf中server節(jié)點(diǎn)新增靜態(tài)資源分離的配置
對(duì)于Nginx基礎(chǔ)配置,推薦之前的:后端實(shí)踐:Nginx日志配置(超詳細(xì))
4.5 訪問頁(yè)面查看效果
Keepalived軟件起初是專為L(zhǎng)VS負(fù)載均衡軟件設(shè)計(jì)的,用來管理并監(jiān)控LVS集群系統(tǒng)中各個(gè)服務(wù)節(jié)點(diǎn)的狀態(tài),后來又加入了可以實(shí)現(xiàn)高可用的VRRP (Virtual Router Redundancy Protocol ,虛擬路由器冗余協(xié)議)功能。因此,Keepalived除了能夠管理LVS軟件外,還可以作為其他服務(wù)(例如:Nginx、Haproxy、MySQL等)的高可用解決方案軟件
管理LVS負(fù)載均衡軟件實(shí)現(xiàn)LVS集群節(jié)點(diǎn)的健康檢查作為系統(tǒng)網(wǎng)絡(luò)服務(wù)的高可用性(failover)
Keepalived高可用服務(wù)之間的故障切換轉(zhuǎn)移,是通過 VRRP 來實(shí)現(xiàn)的。在 Keepalived服務(wù)正常工作時(shí),主 Master節(jié)點(diǎn)會(huì)不斷地向備節(jié)點(diǎn)發(fā)送(多播的方式)心跳消息,用以告訴備Backup節(jié)點(diǎn)自己還活著,當(dāng)主 Master節(jié)點(diǎn)發(fā)生故障時(shí),就無法發(fā)送心跳消息,備節(jié)點(diǎn)也就因此無法繼續(xù)檢測(cè)到來自主 Master節(jié)點(diǎn)的心跳了,于是調(diào)用自身的接管程序,接管主Master節(jié)點(diǎn)的 IP資源及服務(wù)。而當(dāng)主 Master節(jié)點(diǎn)恢復(fù)時(shí),備Backup節(jié)點(diǎn)又會(huì)釋放主節(jié)點(diǎn)故障時(shí)自身接管的IP資源及服務(wù),恢復(fù)到原來的備用角色。
說明:keepalived的主從切換和redis的主從切換是不一樣的,keepalived的主節(jié)點(diǎn)掛了以后,從節(jié)點(diǎn)變?yōu)橹鞴?jié)點(diǎn),之前的主節(jié)點(diǎn)恢復(fù)以后繼續(xù)做主節(jié)點(diǎn)。redis的主節(jié)點(diǎn)掛了以后,重新恢復(fù)以后變?yōu)閺墓?jié)點(diǎn)
說明:
虛擬ip(VIP):192.168.152.200,對(duì)外提供服務(wù)的ip,也可稱作浮動(dòng)ip192.168.152.130:nginx + keepalived master 主192.168.152.129:nginx + keepalived backup 從192.168.152.129:tomcat-8080192.168.152.129:tomcat-8081
環(huán)境準(zhǔn)備:
centos6、jdk
虛擬ip(VIP):192.168.152.200,對(duì)外提供服務(wù)的ip,也可稱作浮動(dòng)ip
192.168.152.130:nginx + keepalived master 主
192.168.152.129:nginx + keepalived backup 從
192.168.152.129:tomcat-8080
192.168.152.129:tomcat-8081
nginx和tomcat的環(huán)境準(zhǔn)備請(qǐng)查看我的前一篇關(guān)于nginx的文章
注:192.168.152.129(keepalived從節(jié)點(diǎn)) 與 192.168.152.130(keepalived主節(jié)點(diǎn))先安裝好nginx + keepalived
下載壓縮包:
wget www.keepalived.org/software/keepalived-1.3.5.tar.gz
解壓縮:
tar -zxvf keepalived-1.3.5.tar.gz
進(jìn)入解壓縮以后的文件目錄:
cd keepalived-1.3.5
編譯安裝:./configure --prefix=/usr/local/keepalived系統(tǒng)提示警告 *** WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.yum -y install libnl libnl-devel再次執(zhí)行./configure --prefix=/usr/local/keepalived系統(tǒng)提示錯(cuò)誤 configure: error: libnfnetlink headers missingyum install -y libnfnetlink-devel再次執(zhí)行./configure --prefix=/usr/local/keepalived
make && make install
到此keepalived安裝完成,但是接下來還有最關(guān)鍵的一步,如果這一步?jīng)]有做后面啟動(dòng)keepalived的時(shí)候會(huì)報(bào)找不到配置文件的錯(cuò)誤
Configuration file '/etc/keepalived/keepalived.conf' is not a regular non-executable file
安裝完成后,進(jìn)入安裝目錄的etc目錄下,將keepalived相應(yīng)的配置文件拷貝到系統(tǒng)相應(yīng)的目錄當(dāng)中。keepalived啟動(dòng)時(shí)會(huì)從/etc/keepalived目錄下查找keepalived.conf配置文件
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived
5.3 修改keepalived從節(jié)點(diǎn)192.168.152.129的/etc/keepalived/keepalived.conf配置文件
5.4 檢查nginx是否啟動(dòng)的shell腳本
/usr/local/src/check_nginx_pid.sh
#!/bin/bash
#檢測(cè)nginx是否啟動(dòng)了
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then #如果nginx沒有啟動(dòng)就啟動(dòng)nginx
/usr/local/nginx/sbin/nginx #重啟nginx
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #nginx重啟失敗,則停掉keepalived服務(wù),進(jìn)行VIP轉(zhuǎn)移
killall keepalived
fi
fi
5.5 192.168.152.130(keepalived主節(jié)點(diǎn))和 192.168.152.129(keepalived從節(jié)點(diǎn))的nginx的配置文件nginx.conf
user root root; #使用什么用戶啟動(dòng)NGINX 在運(yùn)行時(shí)使用哪個(gè)用戶哪個(gè)組
worker_processes 4; #啟動(dòng)進(jìn)程數(shù),一般是1或8個(gè),根據(jù)你的電腦CPU數(shù),一般8個(gè)
worker_cpu_affinity 00000001 00000010 00000100 00001000; #CPU邏輯數(shù)——把每個(gè)進(jìn)程分別綁在CPU上面,為每個(gè)進(jìn)程分配一個(gè)CPU
#pid /usr/local/nginx/logs/nginx.pid
worker_rlimit_nofile 102400; #一個(gè)進(jìn)程打開的最大文件數(shù)目,與NGINX并發(fā)連接有關(guān)系
#工作模式及連接數(shù)上限
events
{
use epoll; #多路復(fù)用IO 基于LINUX2.6以上內(nèi)核,可以大大提高NGINX的性能 uname -a查看內(nèi)核版本號(hào)
worker_connections 102400; #單個(gè)worker process最大連接數(shù),其中NGINX最大連接數(shù)=連接數(shù)*進(jìn)程數(shù),一般1GB內(nèi)存的機(jī)器上可以打開的最大數(shù)大約是10萬(wàn)左右
multi_accept on; #盡可能多的接受請(qǐng)求,默認(rèn)是關(guān)閉狀態(tài)
}
#處理http請(qǐng)求的一個(gè)應(yīng)用配置段
http
{
#引用mime.types,這個(gè)類型定義了很多,當(dāng)web服務(wù)器收到靜態(tài)的資源文件請(qǐng)求時(shí),依據(jù)請(qǐng)求文件的后綴名在服務(wù)器的MIME配置文件中找到對(duì)應(yīng)的MIME #Type,根據(jù)MIMETYPE設(shè)置并response響應(yīng)類型(Content-type)
include mime.types;
default_type application/octet-stream; #定義的數(shù)據(jù)流,有的時(shí)候默認(rèn)類型可以指定為text,這跟我們的網(wǎng)頁(yè)發(fā)布還是資源下載是有關(guān)系的
fastcgi_intercept_errors on; #表示接收fastcgi輸出的http 1.0 response code
charset utf-8;
server_names_hash_bucket_size 128; #保存服務(wù)器名字的hash表
#用來緩存請(qǐng)求頭信息的,容量4K,如果header頭信息請(qǐng)求超過了,nginx會(huì)直接返回400錯(cuò)誤,先根據(jù)client_header_buffer_size配置的值分配一個(gè)buffer,如果##分配的buffer無法容納request_line/request_header,那么就會(huì)##再次根據(jù)large_client_header_buffers配置的參數(shù)分配large_buffer,如果large_buffer還是無#法容納,那么就會(huì)返回414(處理request_line)/400(處理request_header)錯(cuò)誤。
client_header_buffer_size 4k;
large_client_header_buffers 4 32k;
client_max_body_size 300m; #允許客戶端請(qǐng)求的最大單文件字節(jié)數(shù) 上傳文件時(shí)根據(jù)需求設(shè)置這個(gè)參數(shù)
#指定NGINX是否調(diào)用這個(gè)函數(shù)來輸出文件,對(duì)于普通的文件我們必須設(shè)置為ON,如果NGINX專門做為一個(gè)下載端的話可以關(guān)掉,好處是降低磁盤與網(wǎng)絡(luò)的IO處理數(shù)及#系統(tǒng)的UPTIME
sendfile on;
#autoindex on;開啟目錄列表訪問,適合下載服務(wù)器
tcp_nopush on; #防止網(wǎng)絡(luò)阻塞
#非常重要,根據(jù)實(shí)際情況設(shè)置值,超時(shí)時(shí)間,客戶端到服務(wù)端的連接持續(xù)有效時(shí)間,60秒內(nèi)可避免重新建立連接,時(shí)間也不能設(shè)太長(zhǎng),太長(zhǎng)的話,若請(qǐng)求數(shù)10000##,都占用連接會(huì)把服務(wù)托死
keepalive_timeout 60;
tcp_nodelay on; #提高數(shù)據(jù)的實(shí)時(shí)響應(yīng)性
client_body_buffer_size 512k; #緩沖區(qū)代理緩沖用戶端請(qǐng)求的最大字節(jié)數(shù)(請(qǐng)求多)
proxy_connect_timeout 5; #nginx跟后端服務(wù)器連接超時(shí)時(shí)間(代理連接超時(shí))
proxy_read_timeout 60; #連接成功后,后端服務(wù)器響應(yīng)時(shí)間(代理接收超時(shí))
proxy_send_timeout 5; #后端服務(wù)器數(shù)據(jù)回傳時(shí)間(代理發(fā)送超時(shí))
proxy_buffer_size 16k; #設(shè)置代理服務(wù)器(nginx)保存用戶頭信息的緩沖區(qū)大小
proxy_buffers 4 64k; #proxy_buffers緩沖區(qū),網(wǎng)頁(yè)平均在32k以下的話,這樣設(shè)置
proxy_busy_buffers_size 128k; #高負(fù)荷下緩沖大小
proxy_temp_file_write_size 128k; #設(shè)定緩存文件夾大小,大于這個(gè)值,將從upstream服務(wù)器傳
gzip on; #NGINX可以壓縮靜態(tài)資源,比如我的靜態(tài)資源有10M,壓縮后只有2M,那么瀏覽器下載的就少了
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2; #壓縮級(jí)別大小,最小1,最大9.值越小,壓縮后比例越小,CPU處理更快,為1時(shí),原10M壓縮完后8M,但設(shè)為9時(shí),壓縮完可能只有2M了。一般設(shè)置為2
gzip_types text/plain application/x-javascript text/css application/xml; #壓縮類型:text,js css xml 都會(huì)被壓縮
gzip_vary on; #作用是在http響應(yīng)中增加一行目的是改變反向代理服務(wù)器的緩存策略
#日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' #ip 遠(yuǎn)程用戶 當(dāng)?shù)貢r(shí)間 請(qǐng)求URL
'$status $body_bytes_sent "$http_referer" ' #狀態(tài) 發(fā)送的大小 響應(yīng)的頭
'"$http_user_agent" $request_time'; #客戶端使用的瀏覽器 頁(yè)面響應(yīng)的時(shí)間
#動(dòng)態(tài)轉(zhuǎn)發(fā)
upstream web1 {
#每個(gè)請(qǐng)求按訪問ip的hash結(jié)果分配,這樣每個(gè)訪客固定訪問一個(gè)后端服務(wù)器,可以解決session的問題。配置了ip_hash就沒有負(fù)載均衡的效果了,每次訪問的都是同一個(gè)tomcat
#ip_hash;
#轉(zhuǎn)發(fā)的后端的tomcat服務(wù)器,weight表示轉(zhuǎn)發(fā)的權(quán)重,越大轉(zhuǎn)發(fā)的次數(shù)越多,機(jī)器性能不一樣配置的weight值不一樣
server 192.168.152.129:8080 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.152.129:8081 weight=1 max_fails=2 fail_timeout=30s;
}
upstream web2 {
server 192.168.152.129:8090 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.152.129:8091 weight=1 max_fails=2 fail_timeout=30s;
}
server {
listen 80; #監(jiān)聽80端口
server_name www.dbspread.com; #域名
#rewrite規(guī)則
index index.jsp index.html index.htm;
root /usr/local/nginx/html; #定義服務(wù)器的默認(rèn)網(wǎng)站根目錄位置
#重定向
if ($host != 'www.dbspread.com' ){
rewrite ^/(.*)$ http://www.dbspread.com/$1 permanent;
}
#防盜鏈
location ~* \.(rmvb|jpg|png|swf|flv)$ { #rmvb|jpg|png|swf|flv表示對(duì)rmvb|jpg|png|swf|flv后綴的文件實(shí)行防盜鏈
valid_referers none blocked www.dbspread.com; #表示對(duì)www.dbspread.com此域名開通白名單,比如在www.test.com的index.html引用download/av123.rmvb,無效
root html/b;
if ($invalid_referer) { #如果請(qǐng)求不是從www.dbspread.com白名單發(fā)出來的請(qǐng)求,直接重定向到403.html這個(gè)頁(yè)面或者返回403
#rewrite ^/ http://www.dbspread.com/403.html;
return 403;
}
}
#監(jiān)聽完成以后通過斜桿(/)攔截請(qǐng)求轉(zhuǎn)發(fā)到后端的tomcat服務(wù)器
location /
{
#如果后端的服務(wù)器返回502、504、執(zhí)行超時(shí)等錯(cuò)誤,自動(dòng)將請(qǐng)求轉(zhuǎn)發(fā)到upstream負(fù)載均衡池中的另一臺(tái)服務(wù)器,實(shí)現(xiàn)故障轉(zhuǎn)移。
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_set_header Host $host; #獲取客戶端的主機(jī)名存到變量Host里面,從而讓tomcat取到客戶端機(jī)器的信息
proxy_set_header X-Real-IP $remote_addr; #獲取客戶端的主機(jī)名存到變量X-Real-IP里面,從而讓tomcat取到客戶端機(jī)器的信息
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#rewrite ^/$ http://www.dbspread.com/new.index.html permanent;#用戶訪問www.dbspread.com,想直接跳轉(zhuǎn)到網(wǎng)站下面的某個(gè)頁(yè)面:www.dbspread.com/new.index.html
proxy_pass http://web1; #跳轉(zhuǎn)到對(duì)應(yīng)的應(yīng)用web1
}
# location ~ .*\.(php|jsp|cgi|shtml)?$ #動(dòng)態(tài)分離 ~匹配 以.*結(jié)尾(以PHP JSP結(jié)尾走這段)
# {
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_pass http://jvm_web2;
# }
#靜態(tài)分離 ~匹配 以.*結(jié)尾(以html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css結(jié)尾走這段),當(dāng)然不是越久越好,如果有10000個(gè)用戶在線,都保存幾個(gè)月,系統(tǒng)托跨
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
{
root /var/local/static; #靜態(tài)資源存放在nginx的安裝機(jī)器上
#proxy_pass http://www.static.com; #靜態(tài)資源也可存放在遠(yuǎn)程服務(wù)器上
expires 30d;
}
#日志級(jí)別有[debug|info|notice|warn|error|crit] error_log 級(jí)別分為 debug, info, notice, warn, error, crit 默認(rèn)為crit, 生產(chǎn)環(huán)境用error
#crit 記錄的日志最少,而debug記錄的日志最多
access_log /usr/local/logs/web2/access.log main;
error_log /usr/local/logs/web2/error.log crit;
}
}
到這一步環(huán)境準(zhǔn)備已完成,相關(guān)的配置也修改完成,下面我們來查看效果
5.6 配置hosts域名映射
192.168.152.200 www.dbspread.com
注意:這里192.168.152.200 是keepalived里面virtual_ipaddress配置的虛擬ip
virtual_ipaddress {
192.168.152.200 # 定義虛擬ip(VIP),可多設(shè),每行一個(gè)
}
到這一步環(huán)境準(zhǔn)備已完成,相關(guān)的配置也修改完成,下面我們來查看效果
5.7 分別啟動(dòng)192.168.152.129的兩個(gè)tomcat
5.8 分別啟動(dòng)192.168.152.130(keepalived主節(jié)點(diǎn))和
192.168.152.129(keepalived從節(jié)點(diǎn))的keepalived的
啟動(dòng)命令:
/usr/local/keepalived/sbin/keepalived
可以看到keepalived和nginx都啟動(dòng)了
在瀏覽器輸入www.dpspread.com域名訪問
可以看到從節(jié)點(diǎn)變?yōu)橹鞴?jié)點(diǎn)了
在瀏覽器輸入地址www.dpspread.com訪問,可以看到訪問正常
可以看到主節(jié)點(diǎn)重新啟動(dòng)以后變?yōu)橹鞴?jié)點(diǎn)了
之前變?yōu)橹鞴?jié)點(diǎn)的從節(jié)點(diǎn)又變回從節(jié)點(diǎn)了
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。