簡介
以前聽過nginx,但是一直沒接觸過,現在有空,特地去了解并且基本的去使用nginx,網上很多配置介紹,自己寫一篇加深了解以防忘記。
我主要是去了解怎麼用nginx去實行反向代理。簡單說下代理和反向代理吧。
代理:
主要是代理用戶端。
例如:一個公司隻有一個外網ip,但是可能有幾十到上百台電腦,其中每台電腦都需要有上網的功能。那麼此時就可以弄個代理伺服器,公司中的每一個電腦的上網請求全部發送到這個代理伺服器,代理伺服器在利用外網ip去根據不同電腦執行不同的操作。相當就是個中介。這就是代理。
反向代理:
主要是代理伺服器。
最通俗易懂的例子:假如你想查你手機還剩多少餘額。你隻需撥打對應的的營運商電話就可以了(10086/10010/10000),此時,你并不知道接你電話的這個客服代表是男是女,是帥是醜。因為他們有個類似代理伺服器的系統,會自動把你的通話轉接到空閑的客服那兒去。同理,一個伺服器也是這樣的,就像淘寶,在雙11的時候,訂單太多,一個伺服器是處理不過來的。他會把請求分别分發到相對比較空閑的伺服器上去(實際上不知道複雜多少倍.......)。
圖解如下,是在網上copy的一個圖...
配置
官網下載下傳 http://nginx.org/en/download.html
我這兒是下載下傳的1.10.3的windows版本。下載下傳完解壓,找到conf檔案夾下 nginx.conf。在裡面進行配置。
1、在預設請求中添加代理伺服器配置proxy_pass 和proxy_redirect
#預設請求
location / {
#定義伺服器的預設網站根目錄位置
root html;
#定義首頁索引檔案的名稱
index index.html index.htm;
#代理伺服器的配置。與上訴的負載均衡的名要相同
proxy_pass http://demo.com;
# 對發送的URL進行修改(很多時候代理的路徑出問題可以嘗試修改此處)
proxy_redirect default;
}
2、我這兒是同一個電腦的兩個不同tomcat伺服器,更改端口,在tomcat的conf目錄下找到server.xml更改 Connector。具體如下。也可以是不同電腦的不同路徑,以及各種的負載均衡配置,在下一篇介紹。
<!--tomcat預設端口配置-->
<Connector port="8088" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
改完之後添加一個負載均衡配置,具體如下。 位址隻能到端口。我第一次配置想在端口後面加上具體的項目名,結果導緻nginx始終無法啟動。
#負載均衡配置。有多種配置方式,名稱與下面的配置要相同
upstream demo.com{
#服務 位址 權重,數字越大,被通路到的比例越大
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8088 weight=1;
}
整個配置檔案以及詳解如下
#user nobody; #運作使用者
#啟動程序,一般設定為和cpu的數量相等
worker_processes 1;
#全局錯誤日志和pid檔案
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
#工作模式以及連接配接上限數
events {
#單個背景worker process程序的最大并發連結數
worker_connections 1024;
#并發總數(max_clients)為 程序數worker_process乘以worker_connections
#如果作為伺服器的話這個并發總數(max_clients)要除以2。作為反向代理的話要除以4
#為什麼除以2:該公式基于http 1.1協定,一次請求大多數浏覽器發送兩次連接配接,并不是request和response響應占用兩個線程
#為什麼除以4:因nginx作為方向代理,用戶端和nginx建立連接配接,nginx和後端伺服器也要建立連接配接
#worker_connerctions設定的值和實體記憶體大小有關。因為max_clients的數量必須得小于系統可打開的最大檔案數
#系統可打開的檔案數和記憶體是成正比關系。實際最後的并發總量和配置的有一定的偏差。因為系統中還有其他的程序在運作。
}
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"';
#access_log logs/access.log main;
#sendfile可以指定mginx是否調用sendfile函數來輸出檔案,對應普通應用設定為on,
#如果用來進行下載下傳等磁盤io負載較重的應用,可設定為off,可以平衡磁盤和網絡I/O的處理速度
#詳細解釋如下
#設定為on表示啟動高效傳輸檔案的模式。sendfile可以讓Nginx在傳輸檔案時直接在磁盤和tcp socket之間傳輸資料。
#如果這個參數不開啟,會先在使用者空間(Nginx程序空間)申請一個buffer,用read函數把資料從磁盤讀到cache,
#再從cache讀取到使用者空間的buffer,再用write函數把資料從使用者空間的buffer寫入到核心的buffer,
#最後到tcp socket。開啟這個參數後可以讓資料不用經過使用者buffer。
sendfile on;
#tcp_nopush on;
#連接配接逾時時間
#keepalive_timeout 0;
keepalive_timeout 65;
#負載均衡配置。有多種配置方式,名稱與下面的配置要相同
upstream demo.com{
#服務 位址 權重,數字越大,被通路到的比例越大
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8088 weight=1;
}
#是否開啟gzip壓縮
#gzip on;
#虛拟主機配置
server {
#監聽端口
listen 80;
#定義使用localhost通路
server_name localhost;
#charset koi8-r;
#設定本虛拟主機的通路日志
#access_log logs/host.access.log main;
#預設請求
location / {
#定義伺服器的預設網站根目錄位置
root html;
#定義首頁索引檔案的名稱
index index.html index.htm;
#代理伺服器的配置。與上訴的負載均衡的名要相同
proxy_pass http://demo.com;
# 對發送的URL進行修改(很多時候代理的路徑出問題可以嘗試修改此處)
proxy_redirect default;
}
#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
#
#PHP 腳本請求全部轉發到FastCGI處理,使用FastCGI預設配置
#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
#
#禁止通路.ht xxx檔案
#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;
# }
#}
}
配置完後直接點選nginx.exe啟動,或者在指令行中鍵入到對應的檔案位置執行 start -nginx,啟動後在程序中能看到以下兩個程序。
随後打開浏覽器通路localhost:80就能看到效果了。具體效果如下,我是在同一台電腦上開了兩個tomcat,端口分别是8080和8088。有兩個不同的初始頁面,每次通路localhost:80的時候會随機通路其中一個tomcat。
接下來介紹各種不同的負載均衡配置。