通過一個例子演示一下nginx是如何代理服務的,並且講一下nginx.conf的關於server模塊和location模塊的配置
server模塊:配置虛擬主機的相關參數,一個http中可以有多個server
location模塊:配置請求的路由,以及各種頁面的處理情況
首先我在本地虛擬機安裝了nginx和tomcat,啟動后,此時可以使用虛擬機ip地址訪問tomcat
虛擬機ip是:http://192.168.233.128
tomcat監聽的端口是:8080
1.現在想通過nginx代理一下tomcat服務,使用nginx配置的虛擬主機地址來訪問
(1)增加一個server 塊,並在其中添加一個location快,如下
server { listen 8089; server_name localhost; location / { # 只有一個/后面沒有路徑,表示訪問tomcat首頁 proxy_pass http://localhost:8080;
# tomcat服務的路由 (因為我的nginx和tomcat部署在了同一台虛擬機,所以這里填的localhost,假如想代理其他服務器的服務,則填寫程序所在服務器ip端口即可) } }
這樣,在訪問時,使用虛擬主機的ip+端口即可訪問 http://192.168.233.128:8089/
(2)在原有server基礎上添加一個location塊,如下:
server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; # location / { #注意:把原來的根路徑的location注釋掉了,這個頁面是跳轉到nginx的首頁,因為不允許出現2個一樣的location路徑,否則會報錯“nginx: [emerg] duplicate location "/" in /usr/local/nginx/conf/nginx.conf:63” # root html; # index index.html index.htm; #} location / { # 根路徑 proxy_pass http://localhost:8080; # 請求轉向本虛擬機的8080端口(即訪問tomcat)
}
這次,直接使用虛擬機的ip即可訪問tomcat首頁:http://192.168.233.128(不需要加端口,因為是80端口)
2.在tomcat上部署了一個jenkins.war,通過nginx反向代理來訪問
正常訪問jenkins是:http://192.168.233.128:8080/jenkins
通過nginx代理,不加端口訪問,只需在監聽80端口的server塊中添加一個location塊
location /jenkins { # /jenkins表示要訪問的路由下的路徑 proxy_pass http://127.0.0.1:8080; # 請求轉向本虛擬機的8080端口 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; #獲取真實ip proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#獲取代理者的真實ip proxy_redirect off; }
配置完成后重啟nginx,使用http://192.168.233.128/jenkins進行訪問即可
3.代理部署在另一台服務器的程序,通過nginx所在服務器訪問其服務
在監聽80端口的server塊中添加一個location塊
location /ApprPhD { # 訪問程序時需要在ip后添加的路徑 proxy_pass http://192.168.0.XXX:30; # 請求轉向XXX服務器上的服務,結合/ApprPhd,表示訪問 http://192.168.0.XXX:30/ApprPhD proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; #獲取真實ip proxy_set_header REMOTE-HOST $remote_addr; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#獲取代理者的真實ip proxy_redirect off; }
重啟nginx服務后,使用如下鏈接訪問:http://192.168.233.128/ApprPhD