軟件開發全文檔獲取:點我獲取
nginx安裝
#nginx安裝
yum -y install gcc pcre-devel openssl-devel #依賴包
useradd -s /sbin/nologin nginx
./configure
--prefix=/usr/local/nginx #指定安裝目錄
--user=nginx #指定用戶
--with-http_ssl_module #開啟加密功能
make && make install #編譯及安裝
nginx腳本啟動
/usr/local/nginx/sbin/nginx #啟動
/usr/local/nginx/sbin/nginx -s stop #關閉
/usr/local/nginx/sbin/nginx -s reload #從新加載配置-V #查看軟件信息-t #測試配置文件
nginx文件
/usr/local/nginx/html #測試頁面
#nginx配置文件
#Nginx的默認訪問日志文件為/usr/local/nginx/logs/access.log
#Nginx的默認錯誤日志文件為/usr/local/nginx/logs/error.log
#PHP默認錯誤日志文件為/var/log/php-fpm/www-error.log
#-with-http_ssl_module參數,啟用加密模塊,對于需要進行SSL加密處理的站點添加ssl相關指令(設置網站需要的私鑰和證書
nginx/conf/nginx.conf
server {listen 1.1.1.1:80 #監聽IP地址與端口listen 80; #監聽端口server_name localhost; #網站域名
#地址重寫格式【總結】
#rewrite 舊地址 新地址 [選項];
#last 不再讀其他rewrite
#break 不再讀其他語句,結束請求
#redirect 臨時重定向
#permanent 永久重定向rewrite /a.html /b.html redirect; #將a網頁重定向到b網頁并地址跳轉rewrite ^/ http://www.baidu.com; #訪問此地址全部從定向到baidurewrite ^/(.*)$ http://www.baidu.com/$1; #訪問此地址下面的網頁從定向baidussl_certificate cert.pem; #這里是證書文件ssl_certificate_key cert.key; #這里是私鑰文件auth_basic "Input Password:"; #認證提示符信息auth_basic_user_file "/usr/local/nginx/pass"; #認證的密碼文件location / {root html; #指定網站根路徑index index.html index.htm;}#這里,~符號代表正則匹配,*符號代表不區分大小寫if ($http_user_agent ~* firefox) { #識別客戶端firefox瀏覽器rewrite ^(.*)$ /firefox/$1;}}
lnmp環境
#部署lnmp平臺解決動態數據,動態數據為網站解析代碼后返回數據
yum -y install gcc openssl-devel pcre-devel #nginx依賴環境
yum -y install php php-mysql php-fpm #php及依賴環境
yum -y install mariadb mariadb-server mariadb-devel #mariadb及依賴環境
systemctl start mariadb php-fpm#php-fpm配置文件
/etc/php-fpm.d/www.conf
listen = 127.0.0.1:9000 #php端口號
pm.max_children = 32 #最大進程數
pm.start_servers = 15 #最小進程數#修改nginx配置文件
nginx/conf/nginx.conf
location / {root html;index index.php index.html index.htm;
#設置默認首頁為index.php,當用戶在瀏覽器地址欄中只寫域名或IP,不說訪問什么頁面時,服務器會把默認首頁index.php返回給用戶}location ~ \.php$ {root html;fastcgi_pass 127.0.0.1:9000; #將請求轉發給本機9000端口,PHP解釋器fastcgi_index index.php;include fastcgi.conf; #加載其他配置文件}
nginx實現web反向代理
一:高可用一臺宕機,服務不會停,
二:負載均衡(輪詢,哈希,權重,隨機等)。 分布式;各個服務器執行不同功能,來完成一件事。
/nginx/conf/nginx.conf
.. ..
http {
.. ..
#使用upstream定義后端服務器集群,集群名稱任意(如webserver)
#使用server定義集群中的具體服務器和端口
upstream webserver {
#通過ip_hash設置調度規則為:相同客戶端訪問相同服務器ip_hash;server 192.168.2.100 weight=1 max_fails=1 fail_timeout=30;server 192.168.2.200 weight=2 max_fails=2 fail_timeout=30;server 192.168.2.101 down;}
#weight設置服務器權重值,默認值為1
#max_fails設置最大失敗次數,測試服務器幾次才確認服務器失敗
#fail_timeout設置失敗超時時間,單位為秒
#down標記服務器已關機,不參與集群調度
.. ..
server {listen 80;server_name localhost;location / {
#通過proxy_pass將用戶的請求轉發給webserver集群proxy_pass http://webserver;}
nginx常見問題
#自定義錯誤頁面
nginx/conf/nginx.conf
.. ..
charset utf-8; #僅在需要中文時修改該選項
error_page 404 /404.html; #自定義錯誤頁面
.. ..
nginx/html/404.html #定義錯錯誤頁面
#200 一切正常
#301 永久從定向
#302 臨時從定向
#401 用戶或密碼錯誤
#403 禁止訪問(客戶端IP地址被拒接)
#404 文件不存在
#414 請求URL頭過長
#500 服務器內部錯誤
#501 bad gateway
查看服務器狀態 編譯安裝時使用--with-http_stub_status_module開啟狀態頁面模塊
… …
location /status {stub_status on;#allow IP地址;#deny IP地址;}
… …
curl http://192.168.4.5/status
Active connections: 1
server accepts handled requests10 10 3
Reading: 0 Writing: 1 Waiting: 0
#Active connections:當前活動的連接數量。
#Accepts:已經接受客戶端的連接總數量。
#Handled:已經處理客戶端的連接總數量。(一般與accepts一致,除非服務器限制了連接數量)。
#Requests:客戶端發送的請求數量。
#Reading:當前服務器正在讀取客戶端請求頭的數量。
#Writing:當前服務器正在寫響應信息的數量。
#Waiting:當前多少客戶端在等待服務器的響應
優化nginx并發量
ad -n 2000 -c 2000 http://192.168.1.10 #ad高并發測試
nginx/conf/nginx.conf
.. ..
worker_processes 2; #與CPU核心數量一致
events {
worker_connections 65535; #每個worker最大并發連接數
}
.. ..
#優化Linux內核參數(最大文件數量)
ulimit -a #查看所有屬性值
ulimit -Hn 100000 #設置硬限制(臨時規則)
ulimit -Sn 100000 #設置軟限制(臨時規則)
vim /etc/security/limits.conf.. ..
* soft nofile 100000
* hard nofile 100000
#該配置文件分4列,分別如下:
#用戶或組 硬限制或軟限制 需要限制的項目 限制的值
優化nginx數據包頭緩存
.. ..
http {
client_header_buffer_size 1k; #默認請求包頭信息的緩存
large_client_header_buffers 4 4k; #大請求包頭部信息的緩存個數與容量
.. ..
}
瀏覽器本地緩存靜態數據
server {listen 80;server_name localhost;location / {root html;index index.html index.htm;}
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
expires 30d; #定義客戶端緩存時間為30天
}
}