Nginx(("engine x")由俄羅斯的程序設計師Igor Sysoev所開發)是一款自由的、開源的、高性能的HTTP服務器和反向代理服務器;同時也是一個IMAP、POP三、SMTP代理服務器;Nginx能夠做爲一個HTTP服務器進行網站的發佈處理,另外nginx能夠做爲反向代理進行負載均衡的實現。php
#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 {
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"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 8083;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location ~ .*\.(gif|jpg|pdf|jpeg|png)$ { #root D:/nginx-1.15.5/temp/images/;#指定圖片存放路徑(能夠放在nginx文件夾路徑裏也能夠放其餘p盤) root E:/nginx-1.15.5/temp/images/; }
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;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# 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
#
#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 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;
# }
#}
}
(正向代理相似一個跳板機,代理訪問外部資源)html
說反向代理以前,咱們先看看正向代理,正向代理也是你們最常接觸的到的代理模式,咱們會從兩個方面來講關於正向代理的處理模式,分別從軟件方面和生活方面來解釋一下什麼叫正向代理nginx
在現在的網絡環境下,咱們若是因爲技術須要要去訪問國外的某些網站,此時你會發現位於國外的某網站咱們經過瀏覽器是沒有辦法訪問的,此時你們可能都會用一個操做FQ進行訪問,FQ的方式主要是找到一個能夠訪問國外網站的代理服務器,咱們將請求發送給代理服務器,代理服務器去訪問國外的網站,而後將訪問到的數據傳遞給咱們!後端
上述這樣的代理模式稱爲正向代理,正向代理最大的特色是客戶端很是明確要訪問的服務器地址;服務器只清楚請求來自哪一個代理服務器,而不清楚來自哪一個具體的客戶端;正向代理模式屏蔽或者隱藏了真實客戶端信息。瀏覽器
明白了什麼是正向代理,咱們繼續看關於反向代理的處理方式,舉例如我大天朝的某寶網站,天天同時鏈接到網站的訪問人數已經爆表,單個服務器遠遠不能知足人民日益增加的購買慾望了,此時就出現了一個你們耳熟能詳的名詞:分佈式部署;也就是經過部署多臺服務器來解決訪問人數限制的問題;某寶網站中大部分功能也是直接使用nginx進行反向代理實現的,而且經過封裝nginx和其餘的組件以後起了個高大上的名字:Tengine,有興趣的童鞋能夠訪問Tengine的官網查看具體的信息:http://tengine.taobao.org/。那麼反向代理具體是經過什麼樣的方式實現的分佈式的集羣操做呢,咱們先看一個示意圖:安全
經過上述的圖解你們就能夠看清楚了,多個客戶端給服務器發送的請求,Nginx服務器接收到以後,按照必定的規則分發給了後端的業務處理服務器進行處理了。此時~請求的來源也就是客戶端是明確的,可是請求具體由哪臺服務器處理的並不明確了,Nginx扮演的就是一個反向代理角色服務器
反向代理,主要用於服務器集羣分佈式部署的狀況下,反向代理隱藏了服務器的信息!網絡
一般狀況下,咱們在實際項目操做時,正向代理和反向代理頗有可能會存在在一個應用場景中,正向代理代理客戶端的請求去訪問目標服務器,目標服務器是一個反向單利服務器,反向代理了多臺真實的業務處理服務器。具體的拓撲圖以下:session
咱們已經明確了所謂代理服務器的概念,那麼接下來,Nginx扮演了反向代理服務器的角色,它是以依據什麼樣的規則進行請求分發的呢?不用的項目應用場景,分發的規則是否能夠控制呢?app
這裏提到的客戶端發送的、Nginx反向代理服務器接收到的請求數量,就是咱們說的負載量。
請求數量按照必定的規則進行分發到不一樣的服務器處理的規則,就是一種均衡規則。
因此~將服務器接收到的請求按照規則分發的過程,稱爲負載均衡。
負載均衡在實際項目操做過程當中,有硬件負載均衡和軟件負載均衡兩種,硬件負載均衡也稱爲硬負載,如F5負載均衡,相對造價昂貴成本較高,可是數據的穩定性安全性等等有很是好的保障,如中國移動中國聯通這樣的公司纔會選擇硬負載進行操做;更多的公司考慮到成本緣由,會選擇使用軟件負載均衡,軟件負載均衡是利用現有的技術結合主機硬件實現的一種消息隊列分發機制。