1.HTTP服務器
Nginx是一個HTTP服務器,能夠將服務器上的靜態文件(如HTML、圖片)經過HTTP協議展示給客戶端。javascript
2.反向代理服務器
Nginx也是反向代理服務器。php
說反向代理以前先說一下正向代理,正向代理相信不少大陸同胞都在這片神奇的土地上用過了。就是訪問國外網被牆了,而後找個代理服務,經過該服務器訪問國外網站,這個是正向代理。css
反向代理是 客戶端訪問代理服務器,可是代理服務器沒有用戶須要的資源,而後代理服務器偷偷訪問應用服務器,獲取資源返回給用戶,用戶不知道代理服務器是訪問了應用服務器,代理服務器也隱藏了應用服務器的url。(反向代理的典型用途是將 防火牆後面的服務器提供給Internet用戶訪問)html
3.負載均衡
Nginx能夠經過反向代理來實現負載均衡。java
2、Nginx 安裝
2.1 CentOS 7 安裝 Nginx
2.1.1.添加Nginx到YUM源linux
添加CentOS 7 Nginx yum資源庫,打開終端,使用如下命令:nginx
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
2.2.2.安裝Nginxdocker
在你的CentOS 7 服務器中使用yum命令從Nginx源服務器中獲取來安裝Nginx:後端
sudo yum install -y nginx
Nginx將完成安裝在你的CentOS 7 服務器中。centos
2.2.3. Nginx啓動
nginx -c nginx.conf
啓動後就能夠訪問 域名或者本機IP 若是出現下圖,說明啓動成功。
2.2.4. Nginx 中止
//查詢出nginx的pid ps -ef|grep nginx //經過kill 命令殺死 nginx kill pid
注意圖中nginx的 pid 爲 10497
2.2.5. Nginx配置信息
網站文件存放默認目錄
/usr/share/nginx/html
網站默認站點配置
/etc/nginx/conf.d/default.conf
自定義Nginx站點配置文件存放目錄
/etc/nginx/conf.d/
Nginx全局配置
/etc/nginx/nginx.conf
2.2 docker 安裝 Nginx
2.2.1下載鏡像,
docker pull nginx:1.9
2.2.2 啓動容器,
docker run -d -p 8080:80 nginx:1.9
把容器內的nginx的80端口,映射到當前服務器的8080端口,假設當前服務器的ip是192.168.0.100,瀏覽器輸入http://192.168.0.100:8080/,就能夠看到nginx已啓動,
3、Nginx 使用
關於靜態資源服務器的使用這裏就不作說明了。
3.1 反向代理
小例子:實現訪問本機 ip 而後代理 個人博地址 ,也就是在瀏覽器輸入本機地址,而後跳轉到個人博客。
3.1.1 本地安裝nginx
若是是本地安裝的nginx 的話須要修改 /etc/nginx/conf.d/default.conf 配置文件
註釋原有的 location 而後替換爲新的location
//註釋原有的 # location / { # root /usr/share/nginx/html; # index index.html index.htm; # } //新添加的 location / { proxy_pass http://blog.csdn.net/u012373815?viewmode=list; }
而後重啓nginx ,訪問本機ip 就會代理到「http://blog.csdn.net/u012373815?viewmode=list「 個人博客地址。
3.1.2 Docker 安裝
若是是docker 安裝的話,須要本地隨意目錄下新建default.conf 文件,內容以下:
server {
listen 80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/log/host.access.log main; location / { proxy_pass http://blog.csdn.net/u012373815?viewmode=list; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
而後從新啓動容器,將default.conf 文件映射到docker容器內。
啓動命令以下:
docker run -p 8080:80 --name myNginx -v /本地路徑/default.conf:/etc/nginx/conf.d/default.conf -d nginx:1.9
容器啓動後 ,訪問本機ip 就會代理到「http://blog.csdn.net/u012373815?viewmode=list「 個人博客地址。
3.2 負載均衡
上面的配置只實現了反向代理沒有實現傳說中的負載均衡。全部的請求就都被反向代理到 個人博客地址去了。這樣咱們反向代理的功能是實現了,但是就能代理到一臺服務器上哪有什麼負載均衡呀?這就要用到 nginx 的 upstream 模塊了。
upstream backend {
ip_hash; server backend1.example.com; server backend2.example.com; server backend3.example.com; server backend4.example.com; } location / { proxy_pass http://backend; }
咱們在 upstream 中指定了一組機器,並將這個組命名爲 backend,這樣在 proxypass 中只要將請求轉移到 backend 這個 upstream 中咱們就實現了在四臺機器的反向代理加負載均衡。其中的 iphash指明瞭咱們均衡的方式是按照用戶的 ip 地址進行分配。
要讓配置生效,咱們沒必要重啓 nginx 只須要 reload 配置便可。
負載均衡配置示例
假設這樣一個應用場景:將應用部署在 192.168.1.11:80、192.168.1.12:80、192.168.1.13:80 三臺 linux 環境的服務器上。網站域名叫 www.helloworld.com,公網 IP 爲 192.168.1.11。在公網 IP 所在的服務器上部署 nginx,對全部請求作負載均衡處理。
nginx.conf 配置以下:
http { #設定mime類型,類型由mime.type文件定義 include /etc/nginx/mime.types; default_type application/octet-stream; #設定日誌格式 access_log /var/log/nginx/access.log; #設定負載均衡的服務器列表 upstream load_balance_server { #weigth參數表示權值,權值越高被分配到的概率越大 server 192.168.1.11:80 weight=5; server 192.168.1.12:80 weight=1; server 192.168.1.13:80 weight=6; } #HTTP服務器 server { #偵聽80端口 listen 80; #定義使用www.xx.com訪問 server_name www.helloworld.com; #對全部請求進行負載均衡請求 location / { root /root; #定義服務器的默認網站根目錄位置 index index.html index.htm; #定義首頁索引文件的名稱 proxy_pass http://load_balance_server ;#請求轉向load_balance_server 定義的服務器列表 #如下是一些反向代理的配置(可選擇性配置) #proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; #後端的Web服務器能夠經過X-Forwarded-For獲取用戶真實IP proxy_set_header X-Forwarded-For $remote_addr; 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服務器傳 client_max_body_size 10m; #容許客戶端請求的最大單文件字節數 client_body_buffer_size 128k; #緩衝區代理緩衝用戶端請求的最大字節數 } } }
4、nginx配置location總結及rewrite規則寫法
4.1 正則
.
: 匹配除換行符之外的任意字符?
: 重複0次或1次+
: 重複1次或更屢次*
: 重複0次或更屢次\d
:匹配數字^
: 匹配字符串的開始$
: 匹配字符串的介紹{n}
: 重複n次{n,}
: 重複n次或更屢次[c]
: 匹配單個字符c[a-z]
: 匹配a-z小寫字母的任意一個~ 區分大小寫匹配
~* 不區分大小寫匹配
!~和!~*分別爲區分大小寫不匹配及不區分大小寫不匹配
^ 以什麼開頭的匹配
$ 以什麼結尾的匹配
-
小括號
()
之間匹配的內容,能夠在後面經過$1
來引用,$2
表示的是前面第二個()
裏的內容。正則裏面容易讓人困惑的是\
轉義特殊字符。
4.2 經常使用變量
$args
: #這個變量等於請求行中的參數,同$query_string
$content_length
: 請求頭中的Content-length字段。$content_type
: 請求頭中的Content-Type字段。$document_root
: 當前請求在root指令中指定的值。$host
: 請求主機頭字段,不然爲服務器名稱。$http_user_agent
: 客戶端agent信息$http_cookie
: 客戶端cookie信息$limit_rate
: 這個變量能夠限制鏈接速率。$request_method
: 客戶端請求的動做,一般爲GET或POST。$remote_addr
: 客戶端的IP地址。$remote_port
: 客戶端的端口。$remote_user
: 已經通過Auth Basic Module驗證的用戶名。$request_filename
: 當前請求的文件路徑,由root或alias指令與URI請求生成。$scheme
: HTTP方法(如http,https)。$server_protocol
: 請求使用的協議,一般是HTTP/1.0或HTTP/1.1。$server_addr
: 服務器地址,在完成一次系統調用後能夠肯定這個值。$server_name
: 服務器名稱。$server_port
: 請求到達服務器的端口號。$request_uri
: 包含請求參數的原始URI,不包含主機名,如:」/foo/bar.php?arg=baz」。$uri
: 不帶請求參數的當前URI,$uri不包含主機名,如」/foo/bar.html」。$document_uri
: 與$uri相同。
4.3 flag標誌位
last
: 至關於Apache的[L]標記,表示完成rewritebreak
: 中止執行當前虛擬主機的後續rewrite指令集redirect
: 返回302臨時重定向,地址欄會顯示跳轉後的地址permanent
: 返回301永久重定向,地址欄會顯示跳轉後的地址
#路徑重寫配置Demo location /demo/test/ { #以/demo/test路徑開始 #原始路徑: http://127.0.0.1:8080/demo/test/1.html 重寫後:http://127.0.0.1:8888/demo/test2/1.html rewrite ^/demo/test/(.*)$ http://127.0.0.1:8888/demo/test2/$1 break; #以html文件結尾 #原始路徑: http://127.0.0.1:8080/demo/test/1.html 重寫後:http://127.0.0.1:8888/test/demo/test/1.html # 此種方式配置會改變瀏覽器地址,引起跨域請求的問題 #rewrite ^/(.*\.html)$ http://127.0.0.1:8888/test/$1 break; # 此種方式,結合proxy_pass 重寫後則不會改變瀏覽器地址,不存在跨域問題 #rewrite ^/(.*\.html)$ /test/$1 break; #proxy_pass http://127.0.0.1:8888; }
參考資料:
http://blog.csdn.net/u012486840/article/details/52610320
http://www.jb51.net/article/61137.htm
http://seanlook.com/2015/05/17/nginx-location-rewrite/
做者:雙斜槓少年 來源:CSDN 原文:https://blog.csdn.net/u012373815/article/details/54911332