Nginx 教程二:利用nginx搭建靜態檔案服務、正向代理伺服器、反向代理伺服器
使用 Nginx 來提供靜態檔案服務
Nginx 一大經典使用場景就是用來提供靜態檔案服務,例如圖片、html、指令碼、樣式檔案等,這些檔案沒有必要交給 tomcat、jboss等應用伺服器處理,使用 Nginx 直接處理將大大提高效能。用 Nginx 來提供靜態檔案服務十分簡單,只需要新增一個 server 塊指令即可。
假設我們的靜態檔案位於 /srv/www 目錄下,有若干圖片、html、指令碼、樣式等檔案,在 http 指令中加入一個 server 指令即可,程式碼如下
1
2
3
4
5
6
7
8
9
|
#其他配置省略 ... http
{ server
{ location
~* \.(html|css|js|png|jpg|gif|ico)$ { root /srv/www ; } } } |
location指令用來對映請求到本地檔案系統,這裡我們使用了簡單的正規表示式來匹配html、css、js、png、jpg、gif、ico這些為副檔名的請求,注意 location 指令中使用表示式要用 ~ 或者 ~* 符號指明,~表示區分大小寫,~* 表示不區分大小寫。而 root 指令用來指定檔案在伺服器上的基路徑,這裡指定為 /srv/www。
不是太好理解,舉個例子,例如客戶端傳送了一個 GET 請求 http://localhost/images/logo.png,Nginx 接受到該請求後會將該請求分發到匹配的 location 中處理,顯然上面我們寫的 location 指令可以截獲該請求,接下來 nginx 將 request_uri 和 root 拼接成伺服器檔案系統路徑,這裡 request_uri 為 /images/logo.png,root 為 /srv/www ,拼接後路徑為 /srv/www/images/logo.png ,最後 nginx 將伺服器該圖片響應給客戶端,如果不存在該檔案,則返回 404 。
使用 Nginx 來提供正向代理伺服器
① Nginx 另外一大經典使用場景就是用來作為代理伺服器,通常和上述的靜態檔案伺服器配合使用,來完成靜態檔案由 nginx 伺服器提供,而複雜業務請求則由後面的應用伺服器來處理。
配置 nginx 為代理伺服器也很簡單,同樣在 http 上下文中新增一個 server 指令即可,這裡我們以 tomcat 為例
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#其他配置省略 http
{ server
{ #靜態檔案由nginx處理 location
~* \.(html|css|js|png|jpg|gif|ico)$ { root /srv/www ; } #其他所有請求由tomcat處理 location
/ { proxy_pass
http: //localhost :8080; }
} } |
使用 proxy_pass 指令即可將匹配的請求轉發到相應的代理伺服器。這裡我們同時配置了兩個 location,第一個 location 來截獲靜態檔案請求並將請求直接交給 nginx 處理,第二個 location 來截獲除了靜態檔案之外的其他所有請求並將這些請求交給 tomcat 處理。這是 nginx 非常經典的使用方式。
② 正向代理是通常所說的代理,是某臺電腦通過一臺伺服器來上Internet網的這種方式,,其中這臺電腦叫客戶機,這臺伺服器叫正向代理伺服器,也是通常所說的代理伺服器。一般情況下,客戶機必須制定代理伺服器(IE瀏覽器可在工具→Internet選項→連線→區域網設定→代理伺服器中設定)。
2.1 Nginx正向代理配置檔案
user www;
worker_processes 1;
error_log /var/log/nginx/error.log debug;
events {
use epoll;
worker_connections 1024;
}
http {
resolver 8.8.8.8;
server {
listen 8088;
location / {
proxy_pass http://$http_host$request_uri;
}
}
}
以上配置的注意事項:
設定nginx代理服務,一般是配置到一個server塊中。注意,在該server塊中,不要出現server_name指令,即不要設定虛擬主機的名稱和IP。而resolver是必需的,如果沒有該指令,nginx無法處理接收到的域名。其次,nginx代理服務不支援正向代理HTTPS站點。
1,不能有hostname。
2,必須有resolver, 即dns,即上面的x.x.x.x,換成當前機器的DNS伺服器ip即可(檢視dns方法 cat /etc/resolv.conf 代理使用)
3,$http_host和$request_uri是nginx系統變數,保持原樣即可。
2.2 配置完成後,重啟Nginx使配置生效。然後,你可以在IE瀏覽器選單中的“工具”→“Interner選項”→“連線”→“區域網設定”→“代理伺服器”
中設定代理伺服器IP地址和埠,如圖11-6所示。
使用Nginx提供反向代理伺服器
利用nginx把請求轉發到真正的遠端後臺伺服器上,然後後臺伺服器返回資料給nginx,nginx收到資料後再返回給我們頁面。這種技術一般成為請求轉發或者叫反向代理。下面放出一張nginx的配置圖
配置很簡單這裡大概給大家講一下重點部分,
1、location 支援配置專案的絕對路徑
2、假設我們的後臺API地址是以API開頭,location ^~ /api/ 代表nginx將會攔截請求地址中包含"/api/"字樣的請求,其實這就是我們的ajax請求路徑,攔截到請求之後根據寫法會分成兩種情況把這個請求轉發到 下面 proxy_pass 的地址上。
舉個例子:
a、如上圖,如果proxy_pass 的URL以 / 結尾 ,那麼請求轉發的時候 將 不會 帶上 匹配到的 /api/ ,也就是說如果 登入請求 URL是 localhost:60001/api/user/login,proxy_pass URL 是 http://a.xx.com:8080/platform/, Nginx將會 把這個請求轉發成 http://a.xx.com:8080/platform/user/login
b、如果proxy_pass 的URL不以 / 結尾 ,那麼請求轉發的時候 將 會帶上 匹配到的 /api/ ,也就是說如果 登入請求 URL是 localhost:60001/api/user/login,proxy_pass URL 是 http://a.xx.com:8080/platform/, Nginx將會 把這個請求轉發成 http://a.xx.com:8080/platform/api/user/login
3、一般我們登入之後伺服器會通過Set-Cookie把token寫回到我們本地,如果不設定 proxy_cookie_path 的話,伺服器Set-Cookie命令會失效,本地存不了cookie,從而導致token丟失。
這裡proxy_cookie_path有一點需要注意的是 如果 proxy_pass URL 是 http://a.xx.com:8080/platform/ 這種情況 proxy_cookie_path應該設定成 /platform/ / (注意兩個斜槓之間有空格)。
如果 proxy_pass URL 是 http://a.xx.com:8080/這種情況 proxy_cookie_path應該設定成 / / (注意兩個斜槓之間有空格)
重啟下nginx,你就會發現一切都正常了。
原文地址:
靜態資源伺服器:http://www.cnblogs.com/1995hxt/p/6100202.html
location配置的解釋: http://www.cnblogs.com/lidabo/p/4169396.html
反向代理:http://blog.csdn.net/cjd6568358/article/details/51871039
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
userwww;
worker_processes1;
error_log/var/log/nginx/error.logdebug;
events{
useepoll;
worker_connections1024;
}
http{
resolver8.8.8.8;
server{
listen8088;
location/{
proxy_passhttp://$http_host$request_uri;
}
}
}
|
相關文章
- nginx正向代理、反向代理Nginx
- Nginx配置檔案(反向代理伺服器)Nginx伺服器
- Nginx之路--配置正向代理、反向代理Nginx
- Nginx正向代理和反向代理配置Nginx
- Nginx 學習系列(一) ------------- 正向代理與反向代理Nginx
- nginx反向代理多個服務Nginx
- Nginx搭建反向代理伺服器過程詳解Nginx伺服器
- 基於Apache搭建HTTP HTTPS 正向代理 反向代理伺服器ApacheHTTP伺服器
- Nginx負載均衡反向代理伺服器Nginx負載伺服器
- nginx反向代理快取教程。Nginx快取
- 通過docker-compose搭建 Nginx 反向代理伺服器DockerNginx伺服器
- 正向代理與反向代理的區別【Nginx讀書筆記】Nginx筆記
- Nginx反向代理Nginx
- nginx 反向代理Nginx
- 循序漸進nginx(二):反向代理、負載均衡、快取服務、靜態資源訪問Nginx負載快取
- nginx 靜態伺服器搭建Nginx伺服器
- Nginx代理服務Nginx
- 使用nginx搭建http代理伺服器NginxHTTP伺服器
- Nginx搭建反向代理負載均衡和web快取伺服器Nginx負載Web快取伺服器
- nginx 做正向代理配置Nginx
- nginx配置web服務|反向代理|負載均衡NginxWeb負載
- Nginx 靜態檔案伺服器搭建及autoindex模組解析Nginx伺服器Index
- nginx: 高效能http和反向代理伺服器NginxHTTP伺服器
- Nginx初步(反向代理/Web伺服器/輕量級)NginxWeb伺服器
- Nginx 配置:反向代理Nginx
- Nginx 配置反向代理Nginx
- [Nginx] TCP 反向代理NginxTCP
- Nginx 反向代理 websocketNginxWeb
- 正向代理與反向代理
- 反向代理與正向代理
- 正向代理和反向代理
- 使用Nginx搭建公網代理伺服器Nginx伺服器
- 如何使用 Weave 以及 Docker 搭建 Nginx 反向代理/負載均衡伺服器DockerNginx負載伺服器
- Nginx服務系列——代理Nginx
- Nginx-正向代理實現Nginx
- 【代理】正向代理、反向代理、透明代理
- Nginx伺服器的使用與反向代理負載均衡Nginx伺服器負載
- 利用nginx反向代理加速docker映象拉取NginxDocker