工做這麼多年一直用的都是NGINX
,也一直想寫總結,不過以前都是在上班,下班後就比較懶了,因此一直擱置着,趁着如今離職了有時間,就想把以前欠下的都補上,也算是對本身近年來工做技能的總結,但願這篇文章能幫助到你。php
Nginx(發音同「engine X」)是異步框架的網頁服務器,也能夠用做反向代理、負載平衡器和HTTP緩存。該軟件由伊戈爾·賽索耶夫建立並於2004年首次公開發布。2011年成立同名公司以提供支持。2019年3月11日,Nginx公司被F5 Networks以6.7億美圓收購。css
下載nginx_modules
(ps:編譯的時候會用到)
連接: https://pan.baidu.com/s/1MjVdVkF4EAjhPfLImRfWMA 密碼: wwgbhtml
1#!/usr/bin/env bash
2
3DIR=/Users/shiwenyuan/webserver
4mkdir -p $DIR
5cd $DIR
6mkdir run
7
8tar -zxvf /Users/shiwenyuan/totalXbox/project/phpstorm/xlegal/devops/opbin/nginx_modules.tgz -C $DIR
9
10mkdir tmp
11cd tmp
12
13wget http://nginx.org/download/nginx-1.8.1.tar.gz -O nginx-1.8.1.tar.gz
14
15tar -zxvf nginx-1.8.1.tar.gz
16
17cd nginx-1.8.1
18
19./configure \
20--with-http_realip_module \
21--with-http_stub_status_module \
22--with-http_addition_module \
23--add-module=$DIR/nginx_modules/echo-nginx-module-master \
24--add-module=$DIR/nginx_modules/headers-more-nginx-module-master \
25--add-module=$DIR/nginx_modules/memc-nginx-module-master \
26--add-module=$DIR/nginx_modules/nginx-http-concat-master \
27--add-module=$DIR/nginx_modules/ngx_devel_kit-master \
28--add-module=$DIR/nginx_modules/ngx_http_consistent_hash-master \
29--add-module=$DIR/nginx_modules/ngx_http_enhanced_memcached_module-master \
30--add-module=$DIR/nginx_modules/ngx_http_upstream_ketama_chash-0.6 \
31--add-module=$DIR/nginx_modules/srcache-nginx-module-master \
32--with-pcre=$DIR/nginx_modules/pcre-8.38 \
33--prefix=$DIR
34if [[ $? -ne 0 ]];then
35 echo 'error occured\n'
36 exit 1
37fi
38make && make install
39cd $DIR
40/bin/rm -rf tmp
41/bin/rm -rf node_modules
42
43/sbin/nginx -t
複製代碼
線上應用經常都是一個nginx上面會配置好幾個域名,每一個域名都會放到一個單獨的配置文件裏。而後在nginx.conf中引用這些文件,因此能夠理解爲每次nginx啓動的時候都會默認加載nginx.conf,nginx.conf會把相關的server配置都引用進來造成一個大的nginx文件。node
Nginx
服務器或與用戶的網絡鏈接一個nginx
配置文件的結構就像nginx.conf
顯示的那樣,配置文件的語法規則:nginx
#
添加註釋$
使用變量include
引用多個配置文件 1www.example.com/index.php
2 |
3 |
4 Nginx
5 |
6 |
7php-fpm監聽127.0.0.1:9000地址
8 |
9 |
10www.example.com/index.php請求轉發到127.0.0.1:9000
11 |
12 |
13nginx的fastcgi模塊將http請求映射爲fastcgi請求
14 |
15 |
16 php-fpm監聽fastcgi請求
17 |
18 |
19php-fpm接收到請求,並經過worker進程處理請求
20 |
21 |
22php-fpm處理完請求,返回給nginx
23 |
24 |
複製代碼
tcp socket通訊方式,須要在nginx配置文件中填寫php-fpm運行的ip地址和端口號,該方式支持跨服務器,即nginx和php-fpm再也不統一機器上時。git
1location ~ \.php$ {
2 include fastcgi_params;
3 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;;
4 fastcgi_pass 127.0.0.1:9000;
5 fastcgi_index index.php;
6}
複製代碼
unix socket通訊方式,須要在nginx配置文件中填寫php-fpm運行的pid文件地址。unix socket又叫IPC(inter process communication進程間通訊)socket,用於實現統一主機上進程間通訊。github
1location ~ \.php$ {
2 include fastcgi_params;
3 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;;
4 fastcgi_pass unix:/var/run/php5-fpm.sock;
5 fastcgi_index index.php;
6}
複製代碼
Unix socket 不須要通過網絡協議棧,不須要打包拆包、計算校驗和、維護序號和應答等,只是將應用層數據從一個進程拷貝到另外一個進程。因此其效率比 tcp socket 的方式要高,可減小沒必要要的 tcp 開銷。不過,unix socket 高併發時不穩定,鏈接數爆發時,會產生大量的長時緩存,在沒有面向鏈接協議的支撐下,大數據包可能會直接出錯不返回異常。而 tcp 這樣的面向鏈接的協議,能夠更好的保證通訊的正確性和完整性。web
因此,若是面臨的是高併發業務,則考慮優先使用更可靠的tcp socket,咱們能夠經過負載均衡、內核優化等手段來提供效率。算法
在Web開發中,一般來講,動態資源其實就是指那些後臺資源,而靜態資源就是指HTML,JavaScript,CSS,img等文件。
在使用先後端分離以後,能夠很大程度的提高靜態資源的訪問速度,同時在開過程當中也可讓先後端開發並行能夠有效的提升開發時間,也能夠有些的減小聯調時間 。sql
1server {
2 location /www/ {
3 root /www/;
4 index index.html index.htm;
5 }
6
7 location /image/ {
8 root /image/;
9 }
10}
複製代碼
反向代理經常使用與不想把端口暴露出去,直接訪問域名處理請求。
1server {
2 listen 80;
3 server_name www.phpblog.com.cn;
4 location /swoole/ {
5 proxy_pass http://127.0.0.1:9501;
6 }
7 location /node/ {
8 proxy_pass http://127.0.0.1:9502;
9 }
10
11}
複製代碼
1upstream phpServer{
2 server 127.0.0.1:9501;
3 server 127.0.0.1:9502;
4 server 127.0.0.1:9503;
5}
6server {
7 listen 80;
8 server_name www.phpblog.com.cn;
9 location / {
10 proxy_pass http://phpServer;
11 proxy_redirect off;
12 proxy_set_header Host $host;
13 proxy_set_header X-Real-IP $remote_addr;
14 proxy_next_upstream error timeout invalid_header;
15 proxy_max_temp_file_size 0;
16 proxy_connect_timeout 90;
17 proxy_send_timeout 90;
18 proxy_read_timeout 90;
19 proxy_buffer_size 4k;
20 proxy_buffers 4 32k;
21 proxy_busy_buffers_size 64k;
22 proxy_temp_file_write_size 64k;
23 }
24}
複製代碼
1upstream phpServer{
2 server 127.0.0.1:9501 weight=3;
3 server 127.0.0.1:9502;
4 server 127.0.0.1:9503;
5}
複製代碼
在這個配置中,每5個新請求將會以下的在應用實例中分派: 3個請求分派去9501,一個去9502,另一個去9503.
1upstream phpServer{
2 least_conn;
3 server 127.0.0.1:9501;
4 server 127.0.0.1:9502;
5 server 127.0.0.1:9503;
6}
複製代碼
當某些請求須要更長時間來完成時,最少鏈接能夠更公平的控制應用實例上的負載。
1upstream phpServer{
2 ip_hash;
3 server 127.0.0.1:9501;
4 server 127.0.0.1:9502;
5 server 127.0.0.1:9503;
6}
複製代碼
將一個客戶端綁定給某個特定的應用服務器;
因爲瀏覽器同源策略的存在使得一個源中加載來自其它源中資源的行爲受到了限制。即會出現跨域請求禁止。
所謂同源是指:域名、協議、端口相同。
1server {
2 listen 80;
3 server_name www.phpblog.com.cn;
4 root /Users/shiwenyuan/blog/public;
5 index index.html index.htm index.php;
6 location / {
7 try_files $uri $uri/ /index.php?$query_string;
8 }
9 add_header 'Access-Control-Allow-Origin' "$http_origin";
10 add_header 'Access-Control-Allow-Credentials' 'true';
11 add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE, PUT, PATCH';
12 add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,X-XSRF-TOKEN';
13
14 location ~ \.php$ {
15 fastcgi_pass 127.0.0.1:9000;
16 fastcgi_index index.php;
17 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
18 include fastcgi_params;
19 }
20 error_page 404 /404.html;
21 error_page 500 502 503 504 /50x.html;
22 location = /50x.html {
23 root html;
24 }
25}
複製代碼
此處能夠參考我以前寫的一篇文章
nginx配置https證書認證
1location ^~ /saas {
2 root /home/work/php/saas/public;
3 index index.php;
4 rewrite ^/saas(/[^\?]*)?((\?.*)?)$ /index.php$1$2 last;
5 break;
6}
複製代碼
1#!/bin/bash
2#設置你的日誌存放的目錄
3log_files_path="/mnt/usr/logs/"
4#日誌以年/月的目錄形式存放
5log_files_dir=${log_files_path}"backup/"
6#設置須要進行日誌分割的日誌文件名稱,多個以空格隔開
7log_files_name=(access.log error.log)
8#設置nginx的安裝路徑
9nginx_sbin="/mnt/usr/sbin/nginx -c /mnt/usr/conf/nginx.conf"
10#Set how long you want to save
11save_days=10
12
13############################################
14#Please do not modify the following script #
15############################################
16mkdir -p $log_files_dir
17
18log_files_num=${#log_files_name[@]}
19#cut nginx log files
20for((i=0;i<$log_files_num;i++));do
21 mv ${log_files_path}${log_files_name[i]} ${log_files_dir}${log_files_name[i]}_$(date -d "yesterday" +"%Y%m%d")
22done
23$nginx_sbin -s reload
複製代碼
1server {
2 listen 80;
3 server_name *.phpblog.com.cn;
4
5 # 圖片防盜鏈
6 location ~* \.(gif|jpg|jpeg|png|bmp|swf)$ {
7 valid_referers none blocked server_names ~\.google\. ~\.baidu\. *.qq.com;
8 if ($invalid_referer){
9 return 403;
10 }
11 }
12}
複製代碼
1location ~ \.php$ {
2 allow 127.0.0.1; #只容許127.0.0.1的訪問,其餘均拒絕
3 deny all;
4 fastcgi_pass 127.0.0.1:9000;
5 fastcgi_index index.php;
6 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
7 include fastcgi_params;
8}
複製代碼
1location ~ \.(js|css|sql)$ {
2 deny all;
3}
複製代碼
創做不易,但願對你有所幫助。
若是本篇博客有任何錯誤,請批評指教,不勝感激!!!
原創不易,轉載請註明處。
文章將持續更新中,能夠經過微信搜索[石先生的私房菜
]或者下方二維碼關注第一時間閱讀和催更,除了博客之外還會按期發送leetcode
的php版題解
。