非http協議的反代及負載均衡,使用nginx的很少
ngx_stream_core_module,這個模塊只有1.9.0版本纔有,默認不編譯,編譯時須要添加-with-stream選項纔會啓用。
rpm -ql nginx-mod-stream---查看這個模塊修改了哪些文件,只有下面這兩個
/usr/lib64/nginx/modules/ngx_stream_module.so
/usr/share/nginx/modules/mod-stream.confphp
視頻中以ssh服務爲例演示:
前端反代:172.16.0.6
vim /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log'
pid /run/nginx/pid;前端
#Load dynamic modules.See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;mysql
events {
worker_connections 1024;
}nginx
stream {
upstream sshsrvs {---默認是輪詢
server 192.168.10.11:22;
server 192.168.10.12:22;
}web
upstream websrvs {---默認是輪詢 server 192.168.10.11:80; server 192.168.10.12:80; } upstream mysrvs {---默認是輪詢 server 192.168.10.11:3306; server 192.168.10.12:3306; } server { listen 22922;---標準的ssh端口是22,這裏是自定義的端口 proxy_connect_timeout 1s;---指定鏈接超時時間,不是必備選項 proxy_timeout 3s;---指定鏈接超時時間,不是必備選項 proxy_pass 192.168.10.11:22;---nginx用來作四層反代的功能就完成了,這裏指的是後端主機IP port,也能夠寫成proxy_pass sshsrvs; } server { listen 80; proxy_pass 192.168.10.12:80;---nginx四層代理web服務也是能夠的,也能夠寫成proxy_pass websrvs; } server { listen 3306; proxy_pass mysrvs; }
}sql
nginx -t
killall nginx
systemctl start nginx.service
ss -tnlp---查看22922端口
而後客戶端訪問22922端口
ssh -p 22922 root@172.16.0.6---會要求輸入密碼
ifconfig---查看鏈接的究竟是誰,能夠看到鏈接的是192.168.10.11vim
curl http://172.16.0.6/---能夠看到訪問的是192.168.10.12後端
先在反代上測試能不能鏈接mysql
mysql -utest -h192.168.10.11 -ptestpass
而後在客戶端上鍊接mysql服務
mysql -utest -h172.16.0.6 -ptestpass服務器
後端主機:192.168.10.11
systemctl start mariadb.service
mysql -uroot -pmageedu
GRANT ALL ON mydb.* TO test@'%' IDENTIFIED BY 'testpass';---受權一個遠程鏈接的帳號%表明任意主機
FLUSH PRIVILEGES;app
後端主機:192.168.10.12
systemctl start mariadb.service
mysql -uroot -pmageedu
GRANT ALL ON mydb.* TO test@'%' IDENTIFIED BY 'testpass';---受權一個遠程鏈接的帳號%表明任意主機
FLUSH PRIVILEGES;
視頻中的課件:
ngx_stream_core_module
(1)listen address:port[ssl][udp][backlog=number][bind][ipv6only=on|off][reuseport][sp_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
監聽的端口:
默認爲tcp協議;
udp:監聽udp協議的端口
ngx_stream_proxy_module
(1)proxy_pass address;
(2)proxy_timeout timeout;
默認爲10m;代理連續兩次讀寫之間的超時時長
(3)proxy_connect_timeout time;
設置nginx與被代理的服務器嘗試創建鏈接的超時時長;默認爲60s;
編譯安裝:
前提:開發環境,包括nginx編譯要啓用的功能依賴到的開發庫;
#yum groupinstall "Development Tools" "Server Platform Development"
#yum -y pcre-devel openssl-devel
編譯過程:
#./configure --prefix=/usr/local/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_pm4_module --with-threads --with-file-aio
#make&&make install
nginx官方倉庫中的nginx的unit file:/usr/lib/systemd/system/nginx.service [Unit] Description=nginx - high performance web server---描述用來作什麼的 Documentation=http://nginx.org/en/docs/---指明文檔在什麼地方 After=network.target remote-fs.target nss-lookup.target---這三個服務啓動以後才能啓動 [Service] Type=forking---基於forking方式來啓動 PIDFile=/run/nginx.pid ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf---啓動以前作一些預先的操做,(作測試,若是測試不經過,下邊的命令是不會作的) ExesStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf ExecReload=/bin/kill -s HUP $MAINPID---向它發hup信號,mainpid就是master主控進程的pid ExecStop=/bin/kill -s QUIT $MAINPID---發quit信號 PrivateTmp=true [Install]---這個服務要作的話是在運行級別3中安裝的 WantedBy=multi-user.target epel倉庫中的nginx的unit file:/usr/lib/systemd/system/nginx.service [Unit] Description=The nginx HTTP and reverse proxy server---描述用來作什麼的 After=network.target remote-fs.target nss-lookup.target---這三個服務啓動以後才能啓動 [Service] Type=forking---基於forking方式來啓動 PIDFile=/run/nginx.pid #Nginx will fail to start if /run/nginx.pid already exists but has the wrong #SELinux context.This might happen when running 'nginx -t'from the cmdline. #https://bugzilla.redhat.com/show_bug.cgi?id=1268621 ExecStartPre=/usr/bin/rm -f /run/nginx.pid ExecStartPre=/usr/sbin/nginx -t---啓動以前作一些預先的操做,(作測試,若是測試不經過,下邊的命令是不會作的) ExecStart=/usr/sbin/nginx ExecReload=/bin/kill -s HUP $MAINPID---向它發hup信號,mainpid就是master主控進程的pid KillSignal=SIGQUIT TimeoutStopSec=5 KillMode=process PrivateTmp=true [Install]---這個服務要作的話是在運行級別3中安裝的 WantedBy=multi-user.target 編譯過程當中要是編譯第三方模塊,使用下列參數 --add-module=PATH---不支持動態裝卸載 --add-dynamic-module=PATH---支持動態裝卸載 yum remove nginx---卸載nginx 編譯安裝完成以後,須要編輯unitfile,而且作一次daemon-reload vim /usr/lib/systemd/system/nginx.service systemctl daemon-reload systemctl start nginx.service 視頻中提示沒有目錄/var/cache/nginx/client_temp systemctl status nginx.service---能夠檢查服務的狀態信息 mkdir /var/cache/nginx/client_temp -pv chown nginx.nginx /var/cache/nginx systemctl restart nginx.service---而後就沒有問題了
視頻中還講了經過nginx官方倉庫中的src.rpm包格式怎麼安裝 下載下來是src.rpm格式,rpm -ivh 是安裝不上的 此時會建立一個rpmbulid目錄 tree rpmbuild---查看這個目錄,會看到有一個specs文件,這個文件是定義rpm包的,能夠編輯這個文件(爲的是能夠修改默認的nginx編譯選項,添加什麼模塊,刪除什麼模塊) 而後製做rpm包 rpmbuild -bb nginx.spec---bb ba均可以,bb只編譯成二進制格式,ba表示既有二進制格式又有src格式 yum install -y 本身編譯的rpm包,就能夠安裝了
nginx有不少二次發行版tengine(淘寶的nginx,有過載保護功能,能夠拒絕請求) openresty
課程實踐:
nginx-->AMPs(wordpress)
nginx-->FPMs(wordpress)
nginx-->images servers(imgs.magedu.com) location ~* \.(jpg|png|gif|jpeg)$ { ... } dynamic content servers (shop.magedu.com) location ~* \.php$ { ... } location / { ... }
自定義錯誤404和5xx錯誤頁,文本靜態內容傳輸壓縮;