Nginx 是一個高性能的 HTTP 和反向代理服務器,也是一個 IMAP/POP3/SMTP服務器。html
官方測試Nginx可以支撐5萬併發連接,而且cpu、內存等資源消耗卻很是低,運行很是穩定。前端
HTTP 服務器,能夠作網頁靜態服務器;html5
虛擬主機,能夠實如今一臺服務器虛擬出多個網站,例如我的網站使用的虛擬主機;nginx
反向代理,負載均衡。json
官網下載解壓版,雙擊nginx.exe啓動,訪問127.0.0.1展現歡迎頁。後端
nginx的配置由特定的標識符(指令符)分爲多個不一樣的模塊。api
指令符分爲簡單指令和塊指令。跨域
簡單指令格式:[name parameters;]瀏覽器
塊指令格式:和簡單指令格式有同樣的結構,但其結束標識符不是分號,而是大括號{},塊指令內部能夠包含simple directives 和block directives, 能夠稱塊指令爲上下文(e.g. events, http, server, location)服務器
conf文件中,全部不屬於塊指令的簡單指令都屬於main上下文的,http塊指令屬於main上下文,server塊指令http上下文。
反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的鏈接請求,而後將請求轉發給內部網絡上的服務器,並將從服務器上獲得的結果返回給internet上請求鏈接的客戶端,此時代理服務器對外就表現爲一個反向代理服務器。
配置C:\Windows\System32\drivers\etc\hosts文件,新增127.0.0.1 80.itman.com
nginx.conf配置以下:
server {
listen 80;
server_name 80.itman.com;
location / {
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
}
效果:啓動一個Tomcat 127.0.0.1:8080,使用nginx反響代理80.itman.com直接跳轉到127.0.0.1:8080
負載均衡創建在現有網絡結構之上,它提供了一種廉價有效透明的方法擴展網絡設備和服務器的帶寬、增長吞吐量、增強網絡數據處理能力、提升網絡的靈活性和可用性。
負載均衡(Load Balance)其意思就是分攤到多個操做單元上進行執行,例如Web服務器、FTP服務器、企業關鍵應用服務器和其它關鍵任務服務器等,從而共同完成工做任務。
每一個請求按時間順序逐一分配到不一樣的後端服務器,若是後端服務器宕機,能自動剔除。
upstream backserver {
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
server {
listen 80;
server_name 80.itman.com;
location / {
proxy_pass http://backserver;
index index.html index.htm;
}
}
指定輪詢概率,weight和訪問比率成正比,用於後端服務器性能不均的狀況。
upstream backserver {
server 127.0.0.1:8081 weight=1;
server 127.0.0.1:8082 weight=2;
}
每一個請求按訪問ip的hash結果分配,這樣每一個訪客固定訪問一個後端服務器,能夠解決session的問題。
upstream backserver {
ip_hash;
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
upstream backserver { #設定負載均衡的服務器列表
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
server {
listen 80;
server_name 80.itman.com;
location / {
proxy_pass http://backserver; #請求轉向backserver定義的服務器列表
index index.html index.htm; #定義首頁索引文件的名稱
proxy_connect_timeout 1; #nginx跟後端服務器鏈接超時時間(代理鏈接超時)
proxy_send_timeout 1; #後端服務器數據回傳時間(代理髮送超時)
proxy_read_timeout 1; #鏈接成功後,後端服務器響應時間(代理接收超時)
}
}
若http://127.0.0.1:8080工程A中頁面直接訪問http://127.0.0.1:8081/index8081接口,會產生跨域問題。
A頁面代碼:
$(function () { $.get("http://127.0.0.1:8081/index8081", {}, function (result) { $("#show").html(result); }) })
nginx.conf:
server {
listen 80;
server_name localhost;
location /api {
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://127.0.0.1:8081;
index index.html index.htm;
}
location / {
proxy_pass http://127.0.0.1:8080;
index index.html index.htm;
}
}
server {
listen 80;
server_name www.itman.com;
location /A {
proxy_pass http://a.a.com:81/A;
index index.html index.htm;
}
location /B {
proxy_pass http://b.b.com:81/B;
index index.html index.htm;
}
}
A頁面調整:
$(function () { $.get("/api/index8081", {}, function (result) { $("#show").html(result); }) })
瀏覽器跨域的解決方式有不少種:
1.jsonp 須要目標服務器配合一個callback函數。
2.window.name+iframe 須要目標服務器響應window.name。
3.window.location.hash+iframe 一樣須要目標服務器做處理。
4.html5的postMessage+ifrme這個也是須要目標服務器或者說是目標頁面寫一個postMessage,主要側重於前端通信。
5.CORS須要服務器設置header:Access-Control-Allow-Origin。
6.nginx反向代理 這個方法通常不多有人說起,可是他能夠不用目標服務器配合,不過須要你搭建一箇中轉nginx服務器,用於轉發請求。
limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m; #每分鐘30請求 server { limit_req zone=one; listen 8080; server_name 8080.itman.com; location / { root data/www; index index.html index.htm; } }
`limit_req_zone`命令設置了一個叫one的共享內存區來存儲請求狀態的特定鍵值,在上面的例子中是客戶端IP($binary_remote_addr)。location塊中的`limit_req`經過引用one共享內存區來實現限制訪問/login.html的目的。
設置Nginx、Nginx Plus的鏈接數在一個真實用戶請求的合理範圍內。好比,你能夠設置每一個客戶端IP鏈接/store不能夠超過10個。