腳本:
#!/bin/bash #get.cgi echo "content-type:text/html;charset=utf-8" echo #include html code echo "<html>" echo "<head>" echo "<style>" echo "*{font-family:宋體}" echo "</style>" echo "</head>" echo "<body>" echo "<pre>" qs=$QUERY_STRING line=`echo $qs|sed 's/&/ /g'` for loop in $line do name1=`echo $loop|sed 's/=/ /g'|awk '{print $1}'` value1=`echo $loop|sed 's/=/ /g'|awk '{print $2}'|sed 's/+/ /g'|sed -e 's/%\(\)/\\\x/g'` str=`printf "${name1}='${value1}'"` eval $str done echo $id echo $name echo "</pre>" echo "</body>" echo "</html>" 注: 在name1中sed 's/=/ /g'表示將地址欄中的等號替換為空格 在value1中sed 's/+/ /g'表示將地址欄中的加號替換為空格,sed -e 's/%\(\)/\\\x/g' 表示將地址欄中的ASCII字符進行轉換
測試結果:
TML 簡介
地址欄打開網(wǎng)易云網(wǎng)頁,https://music.163.com。按F12打開“開發(fā)者工具”面板,選擇“Element”,即可自由查看。
另一個方法:在當前的網(wǎng)站界面,Ctrl+U直接打開“查看網(wǎng)頁源代碼”。或點擊鼠標右鍵選擇“查看網(wǎng)頁源代碼”。
注意事項:
<!DOCTYPE html> 必須首行固定。
<title> 為文檔標題。
<meta charset="utf-8"> 文檔解碼格式。
<meta name="keywords" content="..."> 和 <meta name="description" content="..."> 提供給搜索引擎使用。
<meta name="viewport" content="width=device-width, initial-scale=1.0"> 移動端瀏覽器的寬高與縮放。
<link> 標簽可以引入 favicon 和樣式表 CSS 文件。
者:小不點啊
來源:www.cnblogs.com/leeSmall/p/9356535.html
一、Nginx Rewrite 規(guī)則
Rewrite規(guī)則含義就是某個URL重寫成特定的URL(類似于Redirect),從某種意義上說為了美觀或者對搜索引擎友好,提高收錄量及排名等。
語法:
rewrite <regex> <replacement> [flag]
關鍵字 || 正則 || 替代內容 || flag標記
Rewrite規(guī)則的flag標記主要有以下幾種:
last和break用來實現(xiàn)URL重寫,瀏覽器地址欄URL地址不變
a) 例如用戶訪問www.dbspread.com,想直接跳轉到網(wǎng)站下面的某個頁面,www.dbspread.com/new.index.html如何來實現(xiàn)呢?我們可以使用Nginx Rewrite 來實現(xiàn)這個需求,具體如下:在server中加入如下語句即可:
效果圖如下:
rewrite ^/$ http://www.dbspread.com/new.index.html permanent;
對應如下語法:
rewrite <regex> <replacement> [flag];
關鍵字 正則 替代內容 flag標記
正則表達式說明:
*代表前面0或更多個字符 +代表前面1或更多個字符
?代表前面0或1個字符 ^代表字符串的開始位置
$代表字符串結束的位置 。為通配符,代表任何字符
b)例如多個域名跳轉到同一個域名,nginx rewrite規(guī)則寫法如下:
格式:
rewrite <regex> <replacement> [flag];
關鍵字 || 正則 || 替代內容 || flag標記
說明:
比如http://www.dbspread.com/download/av123.rmvb 這個視頻下載地址被其他網(wǎng)站引用,比如在www.test.com的index.html引用download/av123.rmvb就叫盜鏈,我們要禁止這種引用就叫做防盜鏈
在nginx的nginx.conf的server里面配置如下代碼
三、Nginx 動靜分離
Nginx動靜分離是讓動態(tài)網(wǎng)站里的動態(tài)網(wǎng)頁根據(jù)一定規(guī)則把不變的資源和經常變的資源區(qū)分開來,動靜資源做好了拆分以后,我們就可以根據(jù)靜態(tài)資源的特點將其做緩存操作,這就是網(wǎng)站靜態(tài)化處理的核心思路。
1). WEB項目開發(fā)時要注意,將靜態(tài)資源盡量放在一個static文件夾2). 將static靜態(tài)資源文件夾放到Nginx可以取到的位置3). 頁面要建立全局變量路徑,方便修改路徑4). 修改nginx.conf的location, 匹配靜態(tài)資源請求
body {
margin: 10px 20px;
text-align: center;
font-family: Arial, sans-serif;
background-color: red;
}
4.4 在nginx的nginx.conf中server節(jié)點新增靜態(tài)資源分離的配置
對于Nginx基礎配置,推薦之前的:后端實踐:Nginx日志配置(超詳細)
4.5 訪問頁面查看效果
Keepalived軟件起初是專為LVS負載均衡軟件設計的,用來管理并監(jiān)控LVS集群系統(tǒng)中各個服務節(jié)點的狀態(tài),后來又加入了可以實現(xiàn)高可用的VRRP (Virtual Router Redundancy Protocol ,虛擬路由器冗余協(xié)議)功能。因此,Keepalived除了能夠管理LVS軟件外,還可以作為其他服務(例如:Nginx、Haproxy、MySQL等)的高可用解決方案軟件
管理LVS負載均衡軟件實現(xiàn)LVS集群節(jié)點的健康檢查作為系統(tǒng)網(wǎng)絡服務的高可用性(failover)
Keepalived高可用服務之間的故障切換轉移,是通過 VRRP 來實現(xiàn)的。在 Keepalived服務正常工作時,主 Master節(jié)點會不斷地向備節(jié)點發(fā)送(多播的方式)心跳消息,用以告訴備Backup節(jié)點自己還活著,當主 Master節(jié)點發(fā)生故障時,就無法發(fā)送心跳消息,備節(jié)點也就因此無法繼續(xù)檢測到來自主 Master節(jié)點的心跳了,于是調用自身的接管程序,接管主Master節(jié)點的 IP資源及服務。而當主 Master節(jié)點恢復時,備Backup節(jié)點又會釋放主節(jié)點故障時自身接管的IP資源及服務,恢復到原來的備用角色。
說明:keepalived的主從切換和redis的主從切換是不一樣的,keepalived的主節(jié)點掛了以后,從節(jié)點變?yōu)橹鞴?jié)點,之前的主節(jié)點恢復以后繼續(xù)做主節(jié)點。redis的主節(jié)點掛了以后,重新恢復以后變?yōu)閺墓?jié)點
說明:
虛擬ip(VIP):192.168.152.200,對外提供服務的ip,也可稱作浮動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)境準備:
centos6、jdk
虛擬ip(VIP):192.168.152.200,對外提供服務的ip,也可稱作浮動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)境準備請查看我的前一篇關于nginx的文章
注:192.168.152.129(keepalived從節(jié)點) 與 192.168.152.130(keepalived主節(jié)點)先安裝好nginx + keepalived
下載壓縮包:
wget www.keepalived.org/software/keepalived-1.3.5.tar.gz
解壓縮:
tar -zxvf keepalived-1.3.5.tar.gz
進入解壓縮以后的文件目錄:
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)提示錯誤 configure: error: libnfnetlink headers missingyum install -y libnfnetlink-devel再次執(zhí)行./configure --prefix=/usr/local/keepalived
make && make install
到此keepalived安裝完成,但是接下來還有最關鍵的一步,如果這一步沒有做后面啟動keepalived的時候會報找不到配置文件的錯誤
Configuration file '/etc/keepalived/keepalived.conf' is not a regular non-executable file
安裝完成后,進入安裝目錄的etc目錄下,將keepalived相應的配置文件拷貝到系統(tǒng)相應的目錄當中。keepalived啟動時會從/etc/keepalived目錄下查找keepalived.conf配置文件
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived
5.3 修改keepalived從節(jié)點192.168.152.129的/etc/keepalived/keepalived.conf配置文件
5.4 檢查nginx是否啟動的shell腳本
/usr/local/src/check_nginx_pid.sh
#!/bin/bash
#檢測nginx是否啟動了
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then #如果nginx沒有啟動就啟動nginx
/usr/local/nginx/sbin/nginx #重啟nginx
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #nginx重啟失敗,則停掉keepalived服務,進行VIP轉移
killall keepalived
fi
fi
5.5 192.168.152.130(keepalived主節(jié)點)和 192.168.152.129(keepalived從節(jié)點)的nginx的配置文件nginx.conf
user root root; #使用什么用戶啟動NGINX 在運行時使用哪個用戶哪個組
worker_processes 4; #啟動進程數(shù),一般是1或8個,根據(jù)你的電腦CPU數(shù),一般8個
worker_cpu_affinity 00000001 00000010 00000100 00001000; #CPU邏輯數(shù)——把每個進程分別綁在CPU上面,為每個進程分配一個CPU
#pid /usr/local/nginx/logs/nginx.pid
worker_rlimit_nofile 102400; #一個進程打開的最大文件數(shù)目,與NGINX并發(fā)連接有關系
#工作模式及連接數(shù)上限
events
{
use epoll; #多路復用IO 基于LINUX2.6以上內核,可以大大提高NGINX的性能 uname -a查看內核版本號
worker_connections 102400; #單個worker process最大連接數(shù),其中NGINX最大連接數(shù)=連接數(shù)*進程數(shù),一般1GB內存的機器上可以打開的最大數(shù)大約是10萬左右
multi_accept on; #盡可能多的接受請求,默認是關閉狀態(tài)
}
#處理http請求的一個應用配置段
http
{
#引用mime.types,這個類型定義了很多,當web服務器收到靜態(tài)的資源文件請求時,依據(jù)請求文件的后綴名在服務器的MIME配置文件中找到對應的MIME #Type,根據(jù)MIMETYPE設置并response響應類型(Content-type)
include mime.types;
default_type application/octet-stream; #定義的數(shù)據(jù)流,有的時候默認類型可以指定為text,這跟我們的網(wǎng)頁發(fā)布還是資源下載是有關系的
fastcgi_intercept_errors on; #表示接收fastcgi輸出的http 1.0 response code
charset utf-8;
server_names_hash_bucket_size 128; #保存服務器名字的hash表
#用來緩存請求頭信息的,容量4K,如果header頭信息請求超過了,nginx會直接返回400錯誤,先根據(jù)client_header_buffer_size配置的值分配一個buffer,如果##分配的buffer無法容納request_line/request_header,那么就會##再次根據(jù)large_client_header_buffers配置的參數(shù)分配large_buffer,如果large_buffer還是無#法容納,那么就會返回414(處理request_line)/400(處理request_header)錯誤。
client_header_buffer_size 4k;
large_client_header_buffers 4 32k;
client_max_body_size 300m; #允許客戶端請求的最大單文件字節(jié)數(shù) 上傳文件時根據(jù)需求設置這個參數(shù)
#指定NGINX是否調用這個函數(shù)來輸出文件,對于普通的文件我們必須設置為ON,如果NGINX專門做為一個下載端的話可以關掉,好處是降低磁盤與網(wǎng)絡的IO處理數(shù)及#系統(tǒng)的UPTIME
sendfile on;
#autoindex on;開啟目錄列表訪問,適合下載服務器
tcp_nopush on; #防止網(wǎng)絡阻塞
#非常重要,根據(jù)實際情況設置值,超時時間,客戶端到服務端的連接持續(xù)有效時間,60秒內可避免重新建立連接,時間也不能設太長,太長的話,若請求數(shù)10000##,都占用連接會把服務托死
keepalive_timeout 60;
tcp_nodelay on; #提高數(shù)據(jù)的實時響應性
client_body_buffer_size 512k; #緩沖區(qū)代理緩沖用戶端請求的最大字節(jié)數(shù)(請求多)
proxy_connect_timeout 5; #nginx跟后端服務器連接超時時間(代理連接超時)
proxy_read_timeout 60; #連接成功后,后端服務器響應時間(代理接收超時)
proxy_send_timeout 5; #后端服務器數(shù)據(jù)回傳時間(代理發(fā)送超時)
proxy_buffer_size 16k; #設置代理服務器(nginx)保存用戶頭信息的緩沖區(qū)大小
proxy_buffers 4 64k; #proxy_buffers緩沖區(qū),網(wǎng)頁平均在32k以下的話,這樣設置
proxy_busy_buffers_size 128k; #高負荷下緩沖大小
proxy_temp_file_write_size 128k; #設定緩存文件夾大小,大于這個值,將從upstream服務器傳
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; #壓縮級別大小,最小1,最大9.值越小,壓縮后比例越小,CPU處理更快,為1時,原10M壓縮完后8M,但設為9時,壓縮完可能只有2M了。一般設置為2
gzip_types text/plain application/x-javascript text/css application/xml; #壓縮類型:text,js css xml 都會被壓縮
gzip_vary on; #作用是在http響應中增加一行目的是改變反向代理服務器的緩存策略
#日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' #ip 遠程用戶 當?shù)貢r間 請求URL
'$status $body_bytes_sent "$http_referer" ' #狀態(tài) 發(fā)送的大小 響應的頭
'"$http_user_agent" $request_time'; #客戶端使用的瀏覽器 頁面響應的時間
#動態(tài)轉發(fā)
upstream web1 {
#每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個后端服務器,可以解決session的問題。配置了ip_hash就沒有負載均衡的效果了,每次訪問的都是同一個tomcat
#ip_hash;
#轉發(fā)的后端的tomcat服務器,weight表示轉發(fā)的權重,越大轉發(fā)的次數(shù)越多,機器性能不一樣配置的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ǎng)站根目錄位置
#重定向
if ($host != 'www.dbspread.com' ){
rewrite ^/(.*)$ http://www.dbspread.com/$1 permanent;
}
#防盜鏈
location ~* \.(rmvb|jpg|png|swf|flv)$ { #rmvb|jpg|png|swf|flv表示對rmvb|jpg|png|swf|flv后綴的文件實行防盜鏈
valid_referers none blocked www.dbspread.com; #表示對www.dbspread.com此域名開通白名單,比如在www.test.com的index.html引用download/av123.rmvb,無效
root html/b;
if ($invalid_referer) { #如果請求不是從www.dbspread.com白名單發(fā)出來的請求,直接重定向到403.html這個頁面或者返回403
#rewrite ^/ http://www.dbspread.com/403.html;
return 403;
}
}
#監(jiān)聽完成以后通過斜桿(/)攔截請求轉發(fā)到后端的tomcat服務器
location /
{
#如果后端的服務器返回502、504、執(zhí)行超時等錯誤,自動將請求轉發(fā)到upstream負載均衡池中的另一臺服務器,實現(xiàn)故障轉移。
proxy_next_upstream http_502 http_504 error timeout invalid_header;
proxy_set_header Host $host; #獲取客戶端的主機名存到變量Host里面,從而讓tomcat取到客戶端機器的信息
proxy_set_header X-Real-IP $remote_addr; #獲取客戶端的主機名存到變量X-Real-IP里面,從而讓tomcat取到客戶端機器的信息
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#rewrite ^/$ http://www.dbspread.com/new.index.html permanent;#用戶訪問www.dbspread.com,想直接跳轉到網(wǎng)站下面的某個頁面:www.dbspread.com/new.index.html
proxy_pass http://web1; #跳轉到對應的應用web1
}
# location ~ .*\.(php|jsp|cgi|shtml)?$ #動態(tài)分離 ~匹配 以.*結尾(以PHP JSP結尾走這段)
# {
# 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)分離 ~匹配 以.*結尾(以html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css結尾走這段),當然不是越久越好,如果有10000個用戶在線,都保存幾個月,系統(tǒng)托跨
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
{
root /var/local/static; #靜態(tài)資源存放在nginx的安裝機器上
#proxy_pass http://www.static.com; #靜態(tài)資源也可存放在遠程服務器上
expires 30d;
}
#日志級別有[debug|info|notice|warn|error|crit] error_log 級別分為 debug, info, notice, warn, error, crit 默認為crit, 生產環(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)境準備已完成,相關的配置也修改完成,下面我們來查看效果
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),可多設,每行一個
}
到這一步環(huán)境準備已完成,相關的配置也修改完成,下面我們來查看效果
5.7 分別啟動192.168.152.129的兩個tomcat
5.8 分別啟動192.168.152.130(keepalived主節(jié)點)和
192.168.152.129(keepalived從節(jié)點)的keepalived的
啟動命令:
/usr/local/keepalived/sbin/keepalived
可以看到keepalived和nginx都啟動了
在瀏覽器輸入www.dpspread.com域名訪問
可以看到從節(jié)點變?yōu)橹鞴?jié)點了
在瀏覽器輸入地址www.dpspread.com訪問,可以看到訪問正常
可以看到主節(jié)點重新啟動以后變?yōu)橹鞴?jié)點了
之前變?yōu)橹鞴?jié)點的從節(jié)點又變回從節(jié)點了
*請認真填寫需求信息,我們會在24小時內與您取得聯(lián)系。