Nginx基本配置
本文提要:本文緊供參考,如有錯誤請聯系我
目錄
一.為nginx增加網站認證功能
二.實現安全加密網站
三.動靜分離
四.地址重寫
1:相同網站內的頁面跳轉
2.相同網站內的頁面跳轉,地址欄會變化
3.從舊網站跳到新網站
4.不同網站的相同頁面的跳轉
5.為瀏覽器用戶設置專屬頁面(為了方便書寫這里就用火狐代替了)
地址重寫的選項
五.Nginx集群代理服務器
六.集群的優化
1.調節集群主機任務量分配
2.健康檢查
3.相同客戶機訪問相同服務器
4.添加down 標記避免重復登陸)
5.查看網站后臺數據
6.緩存文件在客戶端
7.優化nginx支持超長地址欄(不用加模塊)
8.優化nginx并發
七.使用nginx創建其他業務集群
八.解決集群主機過多而導致用戶重復登陸網站
1.安裝memcache數據庫(內存數據是臨時的)
2.測試數據庫
3.最后在服務器主機修改session存儲的位置,實現session共享
一.為nginx增加網站認證功能
auth_basic "password:";??? //網頁彈出的提示信息(不會直接顯示信息)(認證) auth_basic_user_file "/usr/local/nginx/pass";?? //存放網站賬戶(密碼)的文件
yum -y install httpd-tools //安裝軟件包,可以支持htpasswd命令 htpasswd -c pass tom //創建pass文件與tom賬戶,還要輸入兩次密碼(cat pass查看) 文件也可以用絕對路徑/usr/local/nginx/pass或在當前使用相對路徑pass htpasswd pass abc //多追加一個賬戶測試(加-c代表創建新文件,追加不需要加c選項,加c則前面的用戶作廢,也不需要再創建文件)二.實現安全加密網站
server {listen 443 ssl;server_name www.c.com; //這里修改域名ssl_certificate cert.pem; //證書,包含公鑰ssl_certificate_key cert.key; //私鑰ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on;location / {root html_c; //這里修改頁面存儲目錄index index.html index.htm;} }三.動靜分離
location ~ \.php$ { //~是使用正則表達式,匹配用戶輸入的內容以.php結尾root html; //網站頁面位置,不用改,保持默認 fastcgi_pass127.0.0.1:9000;//一旦用戶訪問了.php結尾的文件,就讓nginx找后臺的php-fpm(端口號9000) 該配置文件要于 /etc/php-fpm.d/www.conf 文件的地址對應fastcgi_index index.php; //動態網站的默認頁面,無需修改# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; //無用 行,保持注釋狀態include fastcgi.conf; //這里需要修改名稱}四.地址重寫
1:相同網站內的頁面跳轉
server {listen 80;server_name localhost;rewrite ^/a.html$ /b.html; //相同網站不同頁面charset utf-8;access_log logs/host.access.log main;root html;index index.html index.htm;}2.相同網站內的頁面跳轉,地址欄會變化
server {listen 80;server_name localhost;rewrite ^/a.html$ /b.html redirect; //在剛剛的配置中添加redirectcharset utf-8;access_log logs/host.access.log main;root html;index index.html index.htm;}3.從舊網站跳到新網站
server {listen 80;server_name localhost;rewrite / http://www........; //訪問192.168.2.5就跳到...charset utf-8;access_log logs/host.access.log main;root html;index index.html index.htm;}4.不同網站的相同頁面的跳轉
server {listen 80;server_name localhost;rewrite /(.*) http://www...../$1; //訪問老網站的某個頁面時,跳轉到新網站對應的相同頁面。前面使用正則表達式匹配用戶輸入的任意頁面,并保存起來(小括號在正則中的效果是保留,相當于復制),后面使用$1將之前保 存的頁面地址粘貼到新網站charset utf-8;access_log logs/host.access.log main;root html;index index.html index.htm;}5.為瀏覽器用戶設置專屬頁面(為了方便書寫這里就用火狐代替了)
server {listen 80;server_name localhost;rewrite /(.*) /firefox/$1; //就進行地址重寫操作,讓用戶看到火狐專屬頁面 } //$http_user_agent是nginx的內置變量,存儲了用戶的信息,比如用的什么瀏覽器 ~匹配正則 *忽略大小寫charset utf-8;access_log logs/host.access.log main;root html;index index.html index.htm;}地址重寫的選項
last???? 不再讀其他
rewrite break??? 不再讀其他語句
redirect???? 臨時重定向?? 狀態碼302 爬蟲不更新URI
permanent?? 永久重定向?? 狀態碼 301?? ?爬蟲更新 URI
????????????????????????????????選項測試1:last?? 不再讀其他rewrite??????????????????????????
server {listen 80;server_name localhost;rewrite /a.html /b.html last; //如果沒有last,看a頁面會得到c頁面rewrite /b.html /c.html;charset utf-8;access_log logs/host.access.log main;root html;index index.html index.htm;}????????????????????????????????選項測試2:break 不再讀其他語句?
location / { //此處為默認的location rewrite /a.html /b.html break; //將last改為break可以阻止后面的語句root html;index index.html index.htm;} location /b.html { //這里是新添加的location rewrite /b.html /c.html; }五.Nginx集群代理服務器
http { upstream web { // server 192.168.2.100:80; //這里是集群中的服務器ip與端口 server 192.168.2.200:80; //第二臺集群主機 } server {listen 80;server_name localhost;#charset koi8-r;#access_log logs/host.access.log main;location / { proxy_pass http://web; //在虛擬主機調用集群root html;index index.html index.htm;} }六.集群的優化
1.調節集群主機任務量分配
在上述配置中改:server 192.168.2.200:80 weight=2;??? //權重,值越大,分配的任務量越多
2.健康檢查
在上述配置中改:server 192.168.2.200:80 max_fails=2 fail_timeout=30;?? //檢測兩次如果失敗,則認為集群中的主機故障,之后等待30秒再次測試
3.相同客戶機訪問相同服務器
upstream web { ip_hash; //相同客戶機訪問相同服務器,讓一個客戶機訪問集群時鎖定 一個后臺服務器,避免重復登陸的問題 server 192.168.2.100:80; server 192.168.2.200:80 max_fails=2 fail_timeout=30; }4.添加down 標記避免重復登陸)
upstream web {
ip_hash;(相同客戶訪問相同服務器)
server 192.168.2.100:80;
server 192.168.2.200:80 down;?? //添加down標記,使集群主機
暫時不參與集群任務
}
5.查看網站后臺數據
--with-http_stub_status_module //利用到的模塊 location /status { //在error_page行上面添加此內容 stub_status on;(顯示后臺數據)(這里就可以測試) allow 192.168.2.5; //只允許2.5查看(如果不加這個的話,只要有人知道status都可以訪問) deny all; //拒絕其他主機 } sbin/nginx -s reload //重加載配置 下課休息 17:45回 Curl 192.168.2.5/status 或(firefox 192.168.2.5/status) //查看頁面 Active connections:當前活動的連接數量(當前有多少用戶訪問該網站)。 Accepts:已經接受客戶端的連接總數量。 Handled:已經處理客戶端的連接總數量。 Requests:客戶端發送的請求數量。 Reading:當前服務器正在讀取客戶端請求頭的數量。 Writing:當前服務器正在寫響應信息的數量。 Waiting:當前多少客戶端在等待服務器的響應。6.緩存文件在客戶端
一臺服務器的相同數據可能會被同一個客戶反復訪問,為了不重復讓服務器給客戶傳遞相同數據,達到節約資源、節省時間的目的,我們可以進行以下優化配置
location(匹配) ~* \.(jpg|html|txt|png)$ { //當用戶訪問的是這幾種類型的文件 expires 30d; //都會緩存在客戶機上30天 }7.優化nginx支持超長地址欄(不用加模塊)
默認情況下nginx無法支持長地址欄,會報414錯誤
打開配置文件,在默認的虛擬主機上方添加兩行
client_header_buffer_size 200k;?? //第一行表示,用戶訪問網站的頭部信
息(包含地址欄)長度支持200k大小
large_client_header_buffers 4 200k;? //第二行表示,如果200k不夠,再
給4個200k
8.優化nginx并發
并發:多數用戶同時對網站發起訪問,并發量支持的越高,說明網站性能越強。
默認情況下nginx并發僅僅支持1024個,需要修改配置才能增加
worker_processes 2; //開啟的nginx進程數量,通常是隨cpu的核心數一致worker_connections 50000; //每個nginx進程支持的并發訪問量?七.使用nginx創建其他業務集群
./configure --with-stream --with-http_stub_status_module???? //這里的--with-stream 是添加四層代理模塊,可以用來創建其他業務集群(查看網站后臺數據)
stream {???????? //創建新業務(在網站http外面)
upstream backend {??? //創建名叫backend的集群(后端)(可以自定義)
server 192.168.2.100:22;??? //集群中的主機使用22端口對外提供服務
server 192.168.2.200:22;
}
server {
listen 12345;??? //監聽端口號
proxy_pass backend;??? //調用集群(不是網站服務不用加http)
}
}
ssh? 192.168.2.5 -p 12345??? //嘗試遠程登錄,第一次可能會連接集群的某一臺主機比如web1
?
八.解決集群主機過多而導致用戶重復登陸網站
在一個集群中,如果網站需要用戶輸入用戶名和密碼登陸之后才能繼續訪問,那么當用戶登陸其中一臺集群主機之后隨著繼續訪問頁面,請求可能被代理服務器輪詢到另外一臺服務器上,那么對于另外一臺服務器來說用戶并沒有登陸,想查看登陸之后的頁面還需要再次登陸,這樣集群主機越多需要客戶重復登陸的次數就越多,想要解決該問題就要從Session與Cookies入手
Session:存儲在服務器端,保存用戶名、登陸狀態等信息。
Cookies:由服務器下發給客戶端,保存在客戶端的一個文件里。
保存的內容主要包括:SessionID
了統一session存儲的位置(該存儲方式通常被稱為session共享),需要安裝專門的數據庫工具 memcache? 可以利用內存存儲數據的高性能數據庫服務
1.安裝memcache數據庫(內存數據是臨時的)
????????????????yum -y install memcached telnet??? //裝包
????????????????systemctl start memcached?? //啟動服務
????????????????netstat -ntulp | grep memcached??? //查詢服務器
2.測試數據庫
telnet 127.0.0.1 11211 連接莫種服務的方法 //登錄到memcached服務進行測試 set abc 0 200 3 //創建變量abc,0是不壓縮數據,存活時間200秒,存3個字符(然后寫內容) get abc //查詢abc變量中的數據 replace abc 0 200 3 //覆蓋abc變量的數據(如果abc不存在則失敗) delete abc //刪除abc flush_all //刪除所有數據 add abc 0 200 3 //創建變量abc(如果abc存在則失敗) quit3.最后在服務器主機修改session存儲的位置,實現session共享
vim /etc/php-fpm.d/www.conf //按G到最后一頁 php_value[session.save_handler] = memcache //這里改成memcache,表示session(file:文件)的存儲不在是本地的普通文件,而是去找memcache php_value[session.save_path] = tcp://192.168.2.5:11211 //這里的路徑修改為 安裝了memcache服務的服務器地址與端口(指定內存數據庫服務端) yum -y install php-pecl-memcache //安裝php與memcached服務關聯的軟件包 systemctl restart php-fpm //重啟php-fpm服務總結
- 上一篇: linux三剑客及正则表达(grep,s
- 下一篇: Ansible自动化运维基础------