淺談Nginx服務器的安裝,升級、配置、LNMP平臺搭建、nginx+fastcgi、nginx高級技術-地址重寫及優化
Nginx服務器:是俄羅斯人編寫的十分輕量級的HTTP服務器,是一個高性能的HTTP和反向代理服務器,同時也是一個IMAP/POP3/SMTP代理服務器
一、安裝Nginx軟件:
準備工作:搭建gcc、pcre-devel、openssl-devel環境 yum -y install gcc gcc-c++ make pcre-devel openssl-devel
第一步:創建nginx用戶 useradd nginx
第二步:解壓nginx包 tar -zxvf nginx....tar.gz
第三步:進目錄清單配置cd nginx...------>./configure
常用參數:--prefix=/usr/local/nginx //指定安裝目錄--with-http_ssl_module //指定安全加密
第四步:編譯及安裝 make && make install
安裝完成之後就會有Nginx安裝目錄:/usr/local/nginx/,這個目錄下會有主配置文件、網頁目錄、日誌文件和啟動腳本
主配置文件:/usr/local/nginx/conf/nginx.conf 網頁目錄:/usr/local/nginx/html/(可自定義)
日誌文件:/usr/local/nginx/logs 啟動腳本:/usr/local/nginx/sbin/nginx
啟動nginx服務:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
常用選項:-v查看nginx版本 -V查看編譯參數 -t測試默認配置文件 -c指定配置文件 -s停止nginx服務(接reload重新加載主配置文件)
啟動完服務之後查看服務相關進程及端口信息 ps aux | grep nginx 或者 netstat -autpul | grep nginx
二、在不停止服務的情況下平滑升級Nginx:
第一步:解壓新nginx包,刪除源解壓包 tar -zxvf nginx....tar.gz
第二步:進目錄清單配置cd nginx...------>./configure
常用參數:--prefix=/usr/local/nginx //指定安裝目錄 --with-http_ssl_module //指定安全加密
第三步:編譯 make
第四步:將老nginx腳本改名並拷貝新的nginx腳本進來
1)mv /usr/local/nginx/sbin/nginx nginxold
2)cp nginx /usr/local/nginx/sbin/
第五步:在目錄升級軟件並查看
1)make upgrade
2)/usr/local/nginx/sbin/nginx -v
三、Nginx配置
整個nginx配置文件的結構是:http{ server{ location / {} } }
nginx配置文件裏的全局選項:
user nginx; //進程所有者
worker_processes 1; //啟動進程數量
error_log /var/log/nginx/error.log; //日誌文件
pid /var/run/nginx.pid; //PID文件
events {
worker_connections 1024; //單個進程最大並發量
}
nginx配置文件裏的配制容器:
http{
server{ //定義虛擬主機
listen 80;
server_name localhost;
location / {
root html; //網頁根目錄
index index.html index.htm; //網頁文件
}
}
}
nginx用戶認證:
第一步:修改nginx主配置文件/usr/local/nginx/conf/nginx.conf,在配置容器下添加參數
第二步:在命令行創建用戶名密碼htpasswd -cm /usr/local/nginx/pass.txt 用戶名
(需安裝httpd-tools包,第二次創建用戶名時無需-c,否則會覆蓋)yum -y install httpd-tools
Nginx虛擬主機配置
三種模式虛擬主機:基於域名、端口、IP的虛擬主機
http{
server{ //定義虛擬主機
listen 80; //基於端口
#listen IP:80; //基於IP
server_name localhost; //基於域名
location / {
root html; //網頁根目錄
index index.html index.htm; //網頁文件
}
}
}
SSL虛擬主機配置(SSL加密網站的核心技術是非對稱生成密鑰)
部署SSL虛擬機主機:
第一步:進入/usr/local/nginx/conf目錄生成私鑰(自定義)
openssl genrsa > my.key 或者 openssl genrsa -out my.key 2048
第二步:進入/usr/local/nginx/conf/目錄生成證書(自定義)
openssl req -new -x509 -key my.key -out my.crt
第三步:修改配置文件/usr/local/nginx/conf/nginx.conf,添加證書密鑰參數
Nginx反向代理配置(在nginx主配置文件配置容器裏指定)
Nginx負載分配方式配置:目前支持4種分配方式
輪詢(默認的):逐一循環調度,比例1:1
Weight:指定輪詢幾率,權重值和訪問比率成正比
ip_hash:根據客戶端IP分配固定的後端服務器
服務器組主機狀態配置:
down:表示當前server暫時不參與負載
max_fails:允許請求失敗的次數(默認為1)
fail_timeout:max_fails次失敗後,暫停提供服務的時間
backup:備份服務器
四、LNMP平臺搭建(L:Linux操作系統 N:Nginx網站服務軟件 M:MySQL、MariaDB數據庫 P:網站開發語言(PHP、Perl、Python))
第一步:裝Nginx、mariadb、mariadb-server、mariadb-devel、php、php-mysql、php-fpm
yum -y install mariadb、mariadb-server、mariadb-devel、php、php-mysql
yum localinstall php-fpm....rpm
第二步:起nginx、mariadb、php-fpm服務
nginx -c /usr/local/nginx/conf/nginx.conf systemctl start mariadb、php-fpm
第三步:查看nginx、mariadb、php-fpm服務狀態
nginx:netstat -antpul | grep 80
mariadb:netstat -antpul | grep 3306
php-fpm:netstat -antpul | grep 9000
五、Nginx+FastCGI
FastCGI簡介:是一種常駐型的CGI,將CGI解釋器進程保持在內存中,進行維護與調度,FastCGI技術目前支持語言有PHP、C/C++、Java、Perl、Python、Ruby等
工作原理:(進入nginx主配置文件/usr/local/nginx/conf/nginx.conf配置容器設置)
1,Web Server啟動時載入FastCGI進程管理器
2,FastCGI進程管理器初始化,啟動多個解釋器進程
3,當客戶端請求到達Web Server時,FastCGI進程管理器選擇並連接到一個解釋器
4,FastCGI子進程完成處理後返回結果,將標準輸出和錯誤信息從同一連接返回Web Server
FastCGI缺點:內存消耗大,因為是多進程,所以比CGI多線程消耗更多的服務器內存,PHP-CGI解釋器每進程消耗7~25兆內存,將這個數字乘以50或100就是很大的內存數;Nginx+PHP(FastCGI)服務器在3萬並發連接下開10個Nginx進程消耗150M內存(10*15M),開64個php-cgi進程消耗1280M內存(20M*64)
六、Nginx高級技術-地址重寫
地址重寫:獲得一個來訪的URL請求,然後改寫成服務器可以處理的另一個URL的過程
地址重寫好處:縮短URL,隱藏實際路徑提高安全性,易用戶記憶和鍵入,搜索引擎收錄
常見網站應用場景:當網站文件移動或文件目錄名稱發生改變,出於SEO需要,你需要保持舊的URL,網站改版了,網站導航和鏈接發生變化,為了繼續持有原鏈接帶來的流量,需要保持舊的URL
rewrite語法:rewrite 舊地址 新地址 flag(break、last、redirect、permanent)
break:停止執行其他的重寫規則,完成本次請求
last:停止執行其他重寫規則,根據URL繼續搜索其他location,地址欄不改變
redirect:302臨時重定向,地址欄改變,爬蟲不更新URL
permanent:301永久重定向,地址欄改變,爬蟲更新URL
應用示例:(修改nginx主配置文件/usr/local/nginx/conf/nginx.conf配置容器裏的location參數,添加rewrite規則)
1,頁面文件跳轉 /a.html--------->/b.html
2,網站域名跳轉 192.168.4.5---->www.baidu.com
寫在location內對根文件夾生效,寫在location外對所有文件生效
rewrite ^/(.*) http://www.baidu.com/$1; //網站域名跳轉
3,不同的人訪問相同的鏈接,出來的版式不一樣,根據瀏覽器返回不同的頁面
寫在location內是死循環(報錯http500),寫在location外是正常
4,訪問的資源不存在時,重定向到指定頁面
if(!-e $request_filename){
rewrite ^/ http://域名/文件;
}
七、nginx優化
如何優化:修改nginx主配置文件(vim /usr/local/nginx/conf/nginx.conf)
worker_processes 2; //與CPU核心數量一致
error_log /var/log/nginx.error_log [debug/info/notice/warn/error/crit]; //定義日誌級別
events{
worker_connections 65536; //每個worker最大並發連接數
//最大的連接數=CPU核心數量*最大並發連接數
//由於操作系統的文件數量未限制,需修改ulimit限制/etc/security/limits.conf
查看配置好的參數:ulimit -a
臨時限制:ulimit -Hn/Sn 最大文件數量; 如:ulimit -Hn/Sn 100000;
永久限制:vim /etc/security/limits.conf------->* hard/sort nofile 100000
}
http{
server_tokens off; //不顯示Nginx具體版本號
client_header_buffer_size 1k; //默認請求包頭信息的緩存
large_client_header_buffers 4 4k(工作需要); //大請求包頭部信息的緩存個數與容量
//先根據client_header_buffer分配,如果不夠,再根據large值分配
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
expires 30d; //為客戶端瀏覽器緩存數據30天
}
}
淺談Nginx服務器的安裝,升級、配置、LNMP平臺搭建、nginx+fastcgi、nginx高級技術-地址重寫及優化