實戰一:搭建lnmp及類小米等商業網站的實現 環境:關閉防火牆,selinux 1、安裝包,開啟服務 yum -y install nginx mariadb-server php-fpm php-mysql systemctl start nginx systemctl start mariadb ...
實戰一:搭建lnmp及類小米等商業網站的實現
1、安裝包,開啟服務
yum -y install nginx mariadb-server php-fpm php-mysql
2、修改nginx的配置文件
(1)cp /etc/nginx/nginx.conf.default /etc/nginx/nginx.conf 有個模板例子覆蓋了配置文件
vim /etc/nginx/nginx.conf 修改下麵幾類
① user nobody; 使用用戶
error_log /var/log/nginx/error.log info; 錯誤日誌
② events {
① user nobody; 使用用戶
error_log /var/log/nginx/error.log info; 錯誤日誌
② events {
worker_connections 65535;
}
③ tcp_nopush on; tcp優化
tcp_nodelay on;
gzip on;
④ server {
listen 80;
server_name xiaomi.along.com; 根據自己順便寫
root /data/web; 主站點的目錄根
location / {
index index.php index.html index.htm;
}
⑤ location ~ \.php$ { 開啟.php,配置文件有例子,只需去掉註釋,修改一行即可
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
systemctl restart nginx 重啟服務,發現有warn
(3)ulimit -n 查看linux系統里打開文件描述符的最大值,一般預設值是1024,對一臺繁忙的伺服器來說,這個值偏小,所以有必要重新設置linux系統里打開文件描述符的最大值
3、修改php-fpm的配置文件
date.timezone = Asia/Shanghai 時區
vim /etc/php-fpm.d/www.conf 改兩行
4、運行mysql ,創建一會網頁需要的庫
5、把事先找好的小米網站傳進來 rz
小米網站的源碼資源我已經上傳到網盤了http://pan.baidu.com/s/1kUUFp6B ,需要的私密我
mkdir /data/web -p 創建一個目錄專門放小米的網頁配置
unzip -d /data/web/ xiaomi.zip 解壓到目錄
chown -R nobody.nobody * 為了安全,遞歸把所有文件的所屬人和所屬組改為許可權有限的nobody
6、網頁登錄
7、實驗成功,登錄查看
ab -c 100 -n 1000 http://192.168.30.107/
實驗二:實現ssl 加密
1、創建存放證書的目錄
2、自簽名證書
openssl rsa -in nginx.key -out nginx2.key 因為剛私鑰被加密了,為了後邊方便,解密
3、把證書和私鑰cp 到nginx存放證書目錄
cp nginx.crt nginx2.key /etc/nginx/ssl/
mv nginx2.key nginx.key 把名字改回來
4、修改配置文件,加一段server
server { listen 443 ssl; server_name www.along.com; ssl on; ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.key; ssl_session_cache shared:sslcache:20m; ssl_session_timeout 10m; }
5、測試,網頁打開 https://192.168.30.7/
(2)因為nginx 強大,可以實現多個虛擬主機基於不同的FQDN 實現ssl加密,httpd不能實現
2、把證書和私鑰cp 到nginx存放證書目錄,並解開私鑰的加密
cp nginx{1,2,3}* /etc/nginx/ssl/
openssl rsa -in nginx.key -out nginx.key
openssl rsa -in nginx2.key -out nginx2.key
openssl rsa -in nginx3.key -out nginx3.key
echo website1 > /app/website1/index.html
echo website1 > /app/website2/index.html
echo website1 > /app/website3/index.html
實戰三:實現身份驗證
1、生成密碼賬戶文件
htpasswd -c -m .htpasswd http1
2、在配置文件中修改
vim /etc/nginx/nginx.conf 在location段中指向賬戶密碼文件
auth_basic "images site"; "提示字"
auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
3、網頁查看驗證 http://172.17.22.22/images/loading.gif
實驗四:實現反向代理負載均衡且動靜分離
1、環境準備:
機器名稱 |
IP配置 |
服務角色 |
備註 |
nginx |
VIP:172.17.11.11
|
反向代理伺服器 |
開啟代理功能 設置監控,調度 |
rs01 |
RIP:172.17.22.22 |
後端伺服器 |
stasic-srv 組 |
rs02 |
RIP:172.17.1.7 |
後端伺服器 |
stasic-srv 組 |
rs01 |
RIP:172.17.77.77 |
後端伺服器 |
defautl-srv 組 |
rs02 |
RIP:172.17.252.111 |
後端伺服器 |
defautl-srv 組 |
2、下載編譯安裝tengine
原因:nginx自帶的監控模式雖然能用,但是很不易理解;tengine的監控模式易設簡單,且是在nginx的二次開發,和nginx差不多
(1)官網下載:http://tengine.taobao.org 還支持中文
yum -y groupinstall "development tools"
./configure --prefix=/usr/local/tengine 指定安裝後的目錄
3、設置代理伺服器的配置文件
cp nginx.conf /usr/local/tengine/conf/ 若機器上本有nginx,可以把配置文件直接拷過來,沒有也可自己設置
vim nginx.conf 全局段和 http段我就不設置了,預設就好
upstream lnmp-srv1 { server 172.17.22.22:80; server 172.17.1.7:80; check interval=3000 rise=2 fall=5 timeout=1000 type=http; check_http_send "HEAD / HTTP/1.0\r\n\r\n"; check_http_expect_alive http_2xx http_3xx; } upstream lnmp-srv2 { server 172.17.77.77:80; server 172.17.252.111:80; server 172.17.1.7:80; check interval=3000 rise=2 fall=5 timeout=1000 type=http; check_http_send "HEAD / HTTP/1.0\r\n\r\n"; check_http_expect_alive http_2xx http_3xx; }
server { listen 80; location /stats { #設置監聽頁面 check_status; } location ~* .jpg|.png|.gif|.jpeg$ { proxy_pass http://static-srv; } location ~* .css|.js|.html|.xml$ { proxy_pass http://static-srv; } location / { proxy_pass http://default-srv; } }
4、啟動tengine服務
5、開啟後端的web服務
6、測試
(1)測試反向代理是否成功 http://172.17.11.11/ web頁面訪問成功
(2)測試狀態頁面 http://172.17.11.11/stats
把靜態頁面的後端server組的服務宕機,發現沒有靜態的東西了
實驗五:nginx實現緩存功能
緩存的最根本的目的是為了提高網站性能, 減輕頻繁訪問數據 , 而給資料庫帶來的壓力 。 合理的緩存 , 還會減輕程式運算時 , 對CPU 帶來的壓力。在電腦現代結構中, 操作記憶體中的數據比操作存放在硬碟上的數據是要快N 個數量級的 , 操作簡單的文本結構的數據 , 比操作資料庫中的數據快N 個數量級 。
例如: 每次用戶訪問網站, 都必須從資料庫讀取網站的標題, 每讀一次需要15 毫秒的時間, 如果有100 個用戶( 先不考慮同一時間訪問), 每小時訪問10 次, 那麼就需要讀取資料庫1000 次, 需要時間15000 毫秒. 如果把頁面直接變成頁面緩存,則每次訪問就不需要去資料庫讀取,大大提升了網站性能。
1、環境準備:同上實驗,實驗結構圖如下:
2、設置代理伺服器的配置文件
proxy_cache_path /data/cache levels=1:2:2 keys_zone=proxycache:10m inactive=120s max_size=1g
分析:定義一個緩存,路徑在/data/cache 下;三級目錄,第一級[0-f]隨機數字,第二、三級[00-ff]隨機數字;定義緩存的名字proxycache,緩存大小10M;存活時間120s;在磁碟占用空間最大1G。
proxy_cache proxycache; # 引用上面定義上的緩存空間,同一緩存空間可以在幾個地方使 用 proxy_cache_key $request_uri; #對uri做hash運算 proxy_cache_valid 200 302 301 1h; #200、302、301響應碼的響應內容的緩存1小時 proxy_cache_valid any 1m; #其它緩存1分
add_header Along-Cache "$upstream_cache_status form $server_addr"; # 給請求響應增加一個頭部信息,表示從伺服器上返回的cache
3、測試:訪問 http://172.17.11.11/ ,F12調試模式下,看到自己設置的特定頭部存在