簡介
以前聽過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。