1、Nginx介紹php
Nginx (engine x) 是一個高性能的HTTP和反向代理服務,也是一個IMAP/POP3/SMTP服務。
Nginx是由伊戈爾·賽索耶夫爲俄羅斯訪問量第二的Rambler.ru站點(俄文:Рамблер)開發的,第一個公開版本0.1.0發佈於2004年10月4日。
Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。
其特色是佔有內存少,併發能力強,事實上nginx的併發能力確實在同類型的網頁服務器中表現較好,
中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。
Nginx是一款由俄羅斯的程序設計師所開發高性能的Web和反向代理服務器,也是一個IMAP/POP3/SMTP代理服務器html
輕量級的web服務器node
延伸版本tengine(淘寶)、openresrt(章亦春)等python
http://nginx.org 官網mysql
http://www.nginx.cn/doc/index.html 中文文檔nginx
官網源碼包--必須從官網下載web
配置: 1)檢查環境 是否 知足安裝條件 依賴解決 2)指定安裝方式 配置文件 命令文件 各類文件放哪裏 開啓模塊功能[內置模塊 三方模塊] 3)指定軟件安裝在哪裏
下載並放在/usr/src目錄下:正則表達式
wget http://nginx.org/download/nginx-1.15.5.tar.gz -P /usr/src算法
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
把全部軟件安裝到直到目錄下:./configure --prefix=/usr/local/nginx
把源碼進行編譯生成可執行程序:make
安裝:make install
啓動nginx: 1 cd /usr/local/nginx/
2 /usr/local/nginx/sbin/nginx
查看端口是否被佔用:
一、lsof -i:80
二、netstat -ntpl
虛擬機安裝流程sql
-------
安裝模塊的命令:yum -y install lsof
驗證Nginx是否啓動:
一、服務器公網地址訪問:
二、文本
先安裝 sudo yum -y install elinks 才能執行
elinks http://120.79.2.67 --dump
-------
變量文件
#啓動子進程程序默認用戶 #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; # } #} }
查看配置文件命令:
vim ./conf/nginx.conf
進入配置文件
cd /usr/local/nginx/
cd ./conf
先敲一些就能夠進行編譯
在配置文件下查看進程數:
cat /proc/cpuinfo |grep "flags"|wc -l
再末尾輸入:q從新回到命令行
一個web服務器器軟件默認狀況下只能發佈一個web, 由於一個web分享出去須要三個條件(IP、Port(端口)、Domain name(域名))
一個web服務器器軟件如何發佈多個web呢?
虛擬主機:就是把⼀一臺物理理服務器器劃分紅多個「虛擬」的服務器器,每個虛擬主機均可以有獨立的域名和獨立的目錄
目的是讓一個web服務器發佈多個網站
server { listen 192.168.10.42:80; location / { root html/abc; index index.html index.htm index.php; } } server { listen 192.168.10.52:80; location / { root html/cbd; index index.html index.htm; } }
server { listen 80; #server_name www.abc.com; location / { root html/abc; index index.html index.htm index.php; } } server { listen 8080; #server_name www.abc.com; location / { root html/cbd; index index.html index.htm; } }
同一個ip下的不一樣端口
server { listen 80; server_name www.abc.com; location / { root html/abc; index index.html index.htm index.php; } } server { listen 80; server_name www.cbd.com; location / { root html/cbd; index index.html index.htm; } }
小微企業 ------買網站空間
不用買服務器就能夠託管網站
反向代理介紹:
代理服務器,客戶機在發送請求時,不會直接發送給目的主機,而是先發送給代理服務器,代理服務接受客戶機請求以後,
再向主機發出,並接收目的主機返回的數據,存放在代理理服務器器的硬盤中,再發送給客戶機。
買車人 4s店 廠家
堡壘機場景
• 內網服務器器發佈場景
• 緩存場景
反向代理原理
• 1) 客戶端經過瀏覽器器 發起請求 代理理服務器器 • 2)代理理服務器器 接受請求 • 3) 代理理服務器器 發起請求 業務服務器器 • 4)業務服務器器 接受請求 • 5)業務服務器器 處理理請求 • 6) 業務服務器器 響應請求 代理理服務器器 • 7)代理理服務器器 響應請求 客戶端 • 8)客戶端經過瀏覽器器渲染請求並展現給⽤用戶
反向代理實現
location / { index index.php index.html index.htm; #定義⾸首⻚頁索引⽂文件的名稱 proxy_pass http://mysvr ;#請求轉向mysvr 定義的服務器器列列表 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; #容許客戶端請求的最⼤大單⽂文件字節數 client_body_buffer_size 128k; #緩衝區代理理緩衝⽤用戶端請求的最⼤大字節數, proxy_connect_timeout 90; #nginx跟後端服務器器鏈接超時時間(代理理鏈接超時) proxy_send_timeout 90; #後端服務器器數據回傳時間(代理理發送超時) proxy_read_timeout 90; #鏈接成功後,後端服務器器響應時間(代理理接收超時) proxy_buffer_size 4k; #設置代理理服務器器(nginx)保存⽤用戶頭信息的緩衝區⼤大⼩小 proxy_buffers 4 32k; #proxy_buffers緩衝區,⽹網⻚頁平均在32k如下的話,這樣設置 proxy_busy_buffers_size 64k; #⾼高負荷下緩衝⼤大⼩小(proxy_buffers*2) proxy_temp_file_write_size 64k; #設定緩存⽂文件夾⼤大⼩小,⼤大於這個值,將從upstream服務器器傳 }
限速介紹:
• 限速該特性能夠限制某個用戶在⼀一個給定時間段內可以產生的HTTP請求數。請求能夠簡單到就是⼀一個對於主⻚頁的GET請求或者一個登錄表格的POST請求。
• 限速也能夠用於安全目的上,⽐好比暴暴⼒力力密碼破解攻擊。經過限制進來的請求速率,而且(結合日誌)標記出目標URLs來幫助防範DDoS攻擊。
通常地說,限流是用在
保護上游應⽤用服務器器不不被在同⼀一時刻的⼤大量量⽤用戶請求湮沒。
應用場景
• DDOS防護
• 下載場景保護IO
限速原理
算法思想是:
水(請求)從上方倒入水桶,從水桶下方流出(被處理理);
來不不及流出的水存在水桶中(緩衝),以固定速率流出;
水桶滿後水溢出(丟棄)。
這個算法的核心是:緩存請求、勻速處理、多餘的請求直接丟棄。
實現方式
Nginx官方版本限制IP的鏈接和併發分別有兩個模塊:
limit_req_zone 用來限制單位時間內的請求數,即速率限制。
limit_req_conn 用來限制同一時間鏈接數,即併發限制。
模式使用方法
• limit_req_zone 參數配置 • Syntax: limit_req zone=name [burst=number] [nodelay]; • Default: — • Context: http, server, location
•rewrite模塊(ngx_http_rewrite_module)
• Rewrite功功能是Nginx服務器器提供的⼀一個重要功能。幾乎是全部的web產品必備技能,⽤用於實現URL重寫。URL重寫是很是有用的功能,好比它能夠在
咱們在改變⽹網站結構後,不不須要客戶端修改原來的書籤,也不不須要其餘⽹網站修改對咱們⽹網站的友情連接,還能夠在必定程度上提升網站的安全性,可以
讓咱們的網站顯得更更專業。
•
Nginx服務器器Rewrite功能的實現是依賴於PCRE(Perl Compatible Regular Expression。Perl兼容的正則表達式)的支持,因此在編譯安裝Nginx以前,
須要安裝PCRE庫。
應用場景
• 域名變動更 (京東)
• 用戶跳轉 (從某個鏈接跳到另⼀一個鏈接)
• 僞靜態場景 (便便於CDN緩存動態頁面數據)
實現:
1) set 設置變量量 2) if 負責語句句中的判斷 3) return 返回返回值或URL 4) break 終止後續的rewrite規則 5) rewrite 重定向URL
set指令 ⾃自定義變量量 Syntax: set $variable value; Default: — Context: server, location, if • 將http://www.ayitula.com 重寫爲 http://www.ayitula.com/baism location / { set $name baism; rewrite ^(.*)$ http://www.ayitula.com/$name; }
• 標準狀況下,軟件默認的參數都是對安裝軟件的硬件標準來設置的,⽬目前咱們服務器器的硬件資源遠遠⼤大於要求的標準,
因此爲了了讓服務器器性能更更加出衆,充分利利⽤用服
務器器的硬件資源,咱們通常須要優化APP的併發數來提高服務器器的性能。
傳統web訪問模型
單點故障解決方案
• 1) 部署一臺備份服務器器,宕機直接切換 • 2) 部署多臺服務器器,根據DNS的輪詢解析機制去實現⽤用戶分發 問題: 1方案:服務器器利利⽤用率低,成本⾼高,切換不不及時,服務器器壓力力依然⼤大 2方案: 優點是用戶處理理速度獲得了了提高,可是當其中一臺故障,就會有一部分用戶訪問不不了了⽹網站
• 將多個物理理機器器組成一個邏輯計算機,實現負載均衡和容錯
• 計算機集羣簡稱集羣,是一種計算機系統, 它經過一組鬆散集成的計算機軟件或硬件鏈接起來⾼高度緊密地協做完成計算 工做。在某種意義上,他們能夠被看做是一臺計算機。 (百度解釋)
• 組成要素 1)VIP: 一個IP地址 2)分發器器: nginx 3)數據服務器器: Web服務器器
1) 一門面向對象的語言 2)擁有豐富的庫 3)可移植性 4)免費、開源 5)簡單易易學 可作軟件開發、人工智能、web開發等等
部署流程:
Cnetos7.5+Nginx+python+Django+uwsgi+mysql 實驗部署流程 1)安裝Nginx 2)安裝python 3)安裝mysql 4)部署發佈平臺 5)測試
一、前面已經安裝了Nginx
二、mysql_install(中小型公司)
⼀一個關係型數據庫,由瑞典的AB公司開發,後來賣給了了oracle公司,⽬目前分爲商業版和社區版
⽬目前有量量⼤大版本 mysql5 和 mysql8
⽬目前建議⼤你們先使⽤用5.7最新版本便可。官⽅方提供了了RPM和源碼兩種格式
1)安裝依賴包 2) 升級cmake⼯工具 3) 升級boost庫⽂文件 4) 安裝mysql 5) 啓動測試
mysql_install ⼀1、前期準備 依賴包 1)cmake命令 2.8以上 https://cmake.org/download/ boost Boost庫是⼀一個可移植、提供源代碼的C++庫,做爲標準庫的後備,是C++標準化進 程的開發引擎之⼀一 https://www.boost.org/ mysql https://dev.mysql.com/downloads/mysql/5.7.html#downloads ⼆2、install yum -y install ncurses-devel gcc-* bzip2-* 1)cmake install tar xf cmake-3.6.0-rc1.tar cd cmake-3.6.0-rc1 ./configure make make install 2)boost tar xf boost_1_59_0.tar.bz2 mv boost_1_59_0 /usr/local/boost 3)mysql useradd -s /sbin/nologin -r mysql mkdir -pv /usr/local/mysql/data tar xf mysql...tar.xx cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/ usr/local/mysql/data/ -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock -DDOWNLOAD_BOOST=0 -DWITH_INNODBBASE_STORAGE_ENGINE=1 - DENABLE_LOCAL_INFILE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 - DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_USER=mysql -DWITH_DEBUG=0 -DWITH_EMBEDED_SERVER=0 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/ boost ##解釋 -DCMAKE_INSTALL_PREFIX 指定安裝路路徑 -DMYSQL_DATADIR 指定存放數據⽂文件的⽬目錄位置 -DMYSQL_UNIX_ADDR 指定mysql.sock的路路徑 -DDOWNLOAD_BOOST=0 不不下載boost庫⽂文件 -DWITH_INNODBBASE_STORAGE_ENGINE=1 指定默認存儲引擎 -DENABLE_LOCAL_INFILE=1 容許客戶端使⽤用local data local 導⼊入本地數據⽂文件 -DEXTRA_CHARSETS=all ⽀支持全部字符集 -DDEFAULT_CHARSET=utf8 默認字符集是UTF-8 -DDEFAULT_COLLATION=utf8_general_ci 數據庫校對規則 -DMYSQL_USER=mysql 管理理⽤用戶是mysql -DWITH_DEBUG=0 關閉debug -DWITH_EMBEDED_SERVER=0 ⽣生成⼀一個libmysqld.a(.so)的 庫,這個庫同時集成了了mysql服務與客戶端API -DWITH_BOOST=/usr/local/boost 指定boost的路路徑 make make install 4)安裝後操做 cp support-files/mysql.server /etc/init.d/mysql chmod 755 /etc/init.d/mysql chown mysql.mysql /usr/local/mysql/ -R ln -sf /usr/local/mysql/bin/* /usr/bin/ ln -sf /usr/local/mysql/lib/* /usr/lib/ ln -sf /usr/local/mysql/libexec/* /usr/local/libexec ln -sf /usr/local/mysql/share/man/man1/* /usr/share/man/man1 ln -sf /usr/local/mysql/share/man/man8/* /usr/share/man/man8 /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/ usr/local/mysql/ --datadir=/usr/local/mysql/data/ 修改配置⽂文件 確保路路徑正確 [root@web01 ~]# egrep -v "^#|^$" /etc/my.cnf [mysqld] datadir=/usr/local/mysql/data socket=/usr/local/mysql/mysql.sock symbolic-links=0 [mysqld_safe] log-error=/var/log/mysql.log pid-file=/var/run/mysql.pid !includedir /etc/my.cnf.d 5)啓動mysql 初始化 root@localhost: /q%Zpaoio5i1 6)密碼修改
先安裝依賴