1. 介紹服務器。 服務器邏輯: 服務器選擇 操做系統 部署邏輯 業務環境部署邏輯 業務部署圖 軟件部署文檔 平常維護文檔 測試 開發上傳代碼到源碼系統 上線 - 測服務器,內測 預發佈測試,公測 上線 產品需求確認 產品研發確認 產品測試確認 產品流程文檔 跟蹤統計用戶反饋狀況 2. 架構部署,自測環境,預生產環境,生產環境。
Apache: 消耗資源 Nginx介紹: 輕量級的WEB服務器,和反向代理服務器 延伸版本tengine(淘寶)、openresrt(章亦春)等 官網:http://nginx.org 中文文檔:http://www.nginx.cn/doc/index.html Nginx管理 Nginx優化 Nginx負載均衡 Nginx緩存 環境: 1. Vmware虛擬機 2核4G 2. 網卡:橋接 3. centos7.5 4. 防火牆:關閉 5. Selinux:關閉 6. 網段:192.168.10.0/24 主機名 IP 角色 Master.ayiltuan.com 192.168.10.40 主分發器 Backup.aliltuan.com 192.168.10.41 備分發器 Web01.ayituan.com 192.168.10.42 數據服務器1 Web02.ayituan.com 192.168.10.43 數據服務器2 Nginx目錄: 安裝 相關目錄介紹 啓動 驗證測試
http://nginx.org 1、Nginx安裝 1.1)得到軟件 wget http://nginx.org/download/nginx-1.15.5.tar.gz -P /usr/src 1.2)安裝前準備 cd /usr/src tar xf nginx-1.15.5.tar.gz cd nginx-1.15.5 yum -y install gcc pcre-devel zlib zlib-devel 1.3)配置 1)檢查環境 是否 知足安裝條件 依賴解決 2)指定安裝方式 配置文件 命令文件 各類文件放哪裏 開啓模塊功能【內 置模塊 三方模塊】 3)指定軟件安裝在那裏 ./configure --prefix=/usr/local/nginx 1.4)編譯 使用gcc將源碼生成可執行程序 make -j4 1.5)安裝 make install 2、相關目錄 nginx path prefix: "/usr/local/nginx" nginx binary file: "/usr/local/nginx/sbin/nginx" nginx modules path: "/usr/local/nginx/modules" nginx configuration prefix: "/usr/local/nginx/conf" nginx configuration file: "/usr/local/nginx/conf/nginx.conf" nginx pid file: "/usr/local/nginx/logs/nginx.pid" nginx error log file: "/usr/local/nginx/logs/error.log" nginx http access log file: "/usr/local/nginx/logs/access.log" 3、Nginx啓動 /usr/local/nginx/sbin/nginx 4、驗證 netstat –ntpl lsof -i :80 yum -y install lsof 5、瀏覽器測試 elinks 文本界面瀏覽器 elinks http://192.168.10.42 --dump 百度:(方法比技能更重要!)
/usr/local/nginx/conf/nginx.confphp
#啓動子進程程序默認用戶 #user nobody; #一個主進程和多個工做進程。工做進程是單進程的,且不須要特殊受權便可運行;這裏定義的是工做進程數量 worker_processes 1; #全局錯誤日誌的位置及日誌格式 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { #每一個工做進程最大的併發數 worker_connections 1024; } #http服務器設置 http { #設定mime類型,類型由mime.type文件定義 include mime.types; # default_type application/octet-stream; #日誌格式 #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #$remote_addr與$http_x_forwarded_for用以記錄客戶端的ip地址; #$remote_user:用來記錄客戶端用戶名稱; #$time_local: 用來記錄訪問時間與時區; #$request: 用來記錄請求的url與http協議; #$status: 用來記錄請求狀態;成功是200, #$body_bytes_sent :記錄發送給客戶端文件主體內容大小; #$http_referer:用來記錄從那個頁面連接訪問過來的; #$http_user_agent:記錄客戶瀏覽器的相關信息; #全局訪問日誌路徑 #access_log logs/access.log main; #sendfile指令指定 nginx 是否調用sendfile 函數(zero copy 方式)來輸出文件,對於普通應用,必須設爲on。若是用來進行下載等應用磁盤IO重負載應用,可設置爲off,以平衡磁盤與網絡IO處理速度,下降系統uptime。 sendfile on; #此選項容許或禁止使用socke的TCP_CORK的選項,此選項僅在使用sendfile的時候使用 #tcp_nopush on; #長鏈接超時時間 #keepalive_timeout 0; keepalive_timeout 65; #開啓壓縮 #gzip on; #配置虛擬主機 server { #虛擬主機使用的端口 listen 80; #虛擬主機域名 server_name localhost; #虛擬主機支持的字符集 #charset koi8-r; #虛擬主機的訪問日誌路徑 #access_log logs/host.access.log main; #定義web根路徑 location / { #根目錄路徑 root html; #索引頁 index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # #根據錯誤碼 返回對應的頁面 error_page 500 502 503 504 /50x.html; #定義頁面路徑 location = /50x.html { root html; } #定義反向代理服務器 數據服務器是lamp模型 # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} #定義PHP爲本機服務的模型 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #拒絕apache DR目錄及子目錄下的.htaccess文件訪問 #location ~ /\.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} #https的配置方案 # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # 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; # index index.html index.htm; # } #} }
useradd -s /sbin/nologin -r www # 建立一個 www用戶 html
#啓動子進程程序默認用戶
#user nobody; # www
worker_processes 1; # 有幾個核,就寫幾個 4
killall nginx
yum search killall
yum -y install psmisc
/usr/local/nginx/sbin/nginx
lsof -i :80
前端
實現了負載均衡;每一個工做進程下:最多1024個併發數;linux
../sbin/nginx -g ../conf/nginx.conf
驗證是否 ok 在重啓
關了,在重啓:
killall nginx
/usr/local/nginx/sbin/nginx
重啓:
killall -s HUP nginxnginx
1、默認網站 當Nginx配置⽂文件中有且只有只一個Server的時候,該Server就被Nginx認爲是默認網站, 全部發給Nginx服務器80端⼝口的數據都會默認給該Server. server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } 2、訪問控制 location /a { allow 192.168.1.0/24; deny all; #return 404; return http://www.jd.com; } 3、登錄驗證 auth_basic 語法: auth_basic string | off; 默認值: auth_basic off; auth_basic_user_file file; location /b { auth_basic 」登錄驗證"; auth_basic_user_file /etc/nginx/htpasswd; } 4、日誌管理 Nginx訪問日誌主要有兩個參數控制 log_format log_format #用來定義記錄日誌的格式(能夠定義多種日誌格式,取不一樣名字即 可) access_log #用來指定日至文件的路徑及使用的何種日誌格式記錄日誌 access_log logs/access.log main; log_format格式變量: $remote_addr #記錄訪問網站的客戶端地址 $remote_user #遠程客戶端用戶名 $time_local #記錄訪問時間與時區 $request #用戶的http請求起始行信息 $status #http狀態碼,記錄請求返回的狀態碼,例如:200、30一、404等 $body_bytes_sent #服務器發送給客戶端的響應body字節數 $http_referer #記錄這次請求是從哪一個鏈接訪問過來的,能夠根據該參數進 行防盜鏈設置。 $http_user_agent #記錄客戶端訪問信息,例如:瀏覽器、手機客戶端等 $http_x_forwarded_for #當前端有代理服務器時,設置web節點記錄客戶端 地址的配置,此參數生效的前提是代理服務器也要進行相關的x_forwarded_for設置 案例 自定義一個json格式的訪問日誌 log_format main_json '{"@timestamp":"$time_local",' '"client_ip": "$remote_addr",' '"request": "$request",' '"status": "$status",' '"bytes": "$body_bytes_sent",' '"x_forwarded": "$http_x_forwarded_for",' '"referer": "$http_referer"' '}'; access_log logs/access_json.log main_json; 5、防盜鏈 location /images/ { alias /data/images/; valid_referers none blocked *.ayitula.com; if ($invalid_referer) { rewrite ^/ http://www.ayitula.com/daolian.gif; #return 403; } } 6、日誌截斷 mv access.log access.log.0 killall -USR1 `cat master.nginx.pid` sleep 1 gzip access.log.0
就是把一臺物理服務器劃分紅多個「虛擬」的服務器,每個虛擬主機均可以有獨立的域名和獨立的目錄
同時發佈兩個網站:
DocumentRoot /usr/local/nginx/html/web1
DocumentRoot /usr/local/nginx/html/web2 web
1、基於IP的虛擬主機 實現條件: 1) 兩個IP 2)DR 存在 3)索引頁 index.html #每一個網站都須要一個IP #缺點 須要多個IP 若是是公網IP 每一個IP都須要付費 邏輯網卡,添加子網卡 ifconfig ifconfig ens33:1 192.168.10.52/24 up mkdir /usr/local/nginx/html/web1 mkdir /usr/local/nginx/html/web2 echo web1 > mkdir /usr/local/nginx/html/web1/index.html 配置: server { listen 192.168.10.42:80; location / { root html/web1; index index.html index.htm index.php; } } server { listen 192.168.10.52:80; location / { root html/web2; index index.html index.htm; } } 運行: ../sbin/nginx -g nginx.conf # 測試一下。才能關掉,在啓動。 killall nginx ../sbin/nginx # 啓動 netstat -ntpl # 查看已經啓動得進程 測試: elinks http://192.168.10.42 --dump elinks http://192.168.10.52 --dump ok 2、基於端口的虛擬主機 #只須要一個IP #缺點 端口你是沒法告訴公網用戶 沒法適用於公網客戶 適合內部用戶 ifconfig ens33:1 down 配置: server { listen 80; #server_name www.abc.com; location / { root html/web1; index index.html index.htm index.php; } } server { listen 8080; #server_name www.abc.com; location / { root html/web2; index index.html index.htm; } } 啓動: ../sbin/nginx -g nginx.conf # 測試一下。才能關掉,在啓動。 killall nginx netstat -ntpl 測試: elinks http://192.168.10.42 --dump # 沒加端口,默認是80 elinks http://192.168.10.42:8080 --dump 3、基於域名的虛擬主機 一個網站必然有一個域名 配置: vim /etc/hosts 。。。 192.168.10.42 www.abc.com 192.168.10.42 www.cbd.com server { listen 80; server_name www.abc.com; location / { root html/web1; index index.html index.htm index.php; } } server { listen 80; server_name www.cbd.com; location / { root html/web2; index index.html index.htm; } } 測試: elinks www.abc.com --dump # 沒加端口,默認是80 elinks www.cbd.com --dump