做者:JackTian
微信公衆號:傑哥的IT之旅(ID:Jake_Internet)html
LAMP 系列導讀java
LNMP 系列導讀nginx
在上一篇文章中,經過最簡單的方式讓你們如何在 Linux 環境下搭建 Nginx 服務,同時還收到好幾位讀者的留言期待後續的 Nginx 系列的文章,那麼咱們不只僅是爲了搭建服務而搭建,同時要把它利用起來,爲咱們提供更多的服務。在今天的文章中,進一步帶領你們認識什麼是 Nginx 的正向代理與反向代理以及經過這兩個代理作一個簡單的實操案例;web
1、正向代理
正向代理:你能夠這樣理解,就是把局域網之外的 Internet 想象成一個外網世界,那麼當咱們局域網中的客戶端設備要訪問局域網之外的 Internet 時,需在客戶端瀏覽器中配置代理服務器,而後經過代理服務器來進行訪問,將訪問到的局域網之外的 Internet 網站內容返回給客戶端,而不是經過局域網中的客戶端設備直接訪問到局域網之外的 Internet 網站中,這種代理服務稱之爲:正向代理。
正則表達式
正向代理的用途:
訪問原來沒法訪問的資源;數據庫
可作緩存,加速訪問資源;apache
對客戶端訪問受權,上網進行認證;bootstrap
代理能夠記錄用戶訪問記錄等,且對外隱藏用戶信息;vim
2、反向代理
反向代理:無需在客戶端進行配置便可訪問,咱們只須要將請求發送給反向代理服務器,而後由反向代理服務器去選擇要訪問的目標服務器獲取數據後,在返回給客戶端。這裏你能夠這樣理解:反向代理服務器和目標服務器對外訪問的就是一臺服務器,知道的是反向代理服務器地址,其實隱藏了真實服務器的 IP 地址, 這種代理服務稱之爲:反向代理。
反向代理的用途:
保證內網安全,一般將反向代理做爲公網訪問地址,Web 服務器是內網;瀏覽器
負載均衡,經過反向代理服務器來優化網站的負載;
3、正向代理配置實操
在Nginx服務器上,修改nginx.conf配置文件,配置到一個 server 塊中,以下代碼塊中的第 35 行,在該 server 塊中,server_name 指令,不要設置虛擬主機的名稱和 IP,按默認的便可,而resolver是必需要配置的,如沒有該指令,Nginx 將沒法處理接收到的IP地址,其次,Nginx 代理服務不支持正向代理 HTTPS 站點。
# vi /root/nginx-1.17.0/conf/nginx.conf 35 server { 36 resolver 192.168.1.10 # 指定 Nginx 服務器 IP 地址 37 listen 80; 44 location / { 45 proxy_pass http://$http_host$request_uri; # 設定代理服務器的協議和地址
重啓Nginx服務,關閉防火牆和SELINUX。
# ./nginx -s reload # service iptables stop # setenforce 0
在客戶端設備上進行配置代理服務器地址和端口號,必須與上述Nginx服務器配置文件的配置相符,這樣就能夠經過Nginx的正向代理進行訪問代理服務器能訪問到的資源了。
進行驗證:在客戶端瀏覽器中輸入Nginx服務器地址便可;
4、反向代理前期準備工做實操
實現效果:經過客戶端,在瀏覽器地址欄中輸入Nginx服務器地址,便可訪問 Tomcat 頁面。
準備工做
一、 在Nginx服務器上安裝Tomcat,使用默認端口:8080,解壓壓縮包,進入到Tomcat的bin目錄下,執行./startup.sh命令啓動Tomcat服務;
二、 添加對外開放端口,保存配置並進行查看;
三、 經過Windows客戶端設備瀏覽器進行訪問Tomcat服務;
首先,在安裝Tomcat前,須要一個 JDK 的環境,那麼咱們須要在Nginx服務器上查看 JDK 是否有存在,若有可先用系統自帶的 JDK ,如不合適能夠在手動安裝一個。
# java -version java version "1.7.0_45" OpenJDK Runtime Environment (rhel-2.4.3.3.el6-x86_64 u45-b15) OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)
解壓Tomcat壓縮包,在bin目錄下,執行startup.sh的文件,啓動 Tomcat;
# tar -xvf apache-tomcat-7.0.70.tar.gz # cd apache-tomcat-7.0.70 # ls bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work # cd bin/ # ./startup.sh Using CATALINA_BASE: /root/apache-tomcat-7.0.70 Using CATALINA_HOME: /root/apache-tomcat-7.0.70 Using CATALINA_TMPDIR: /root/apache-tomcat-7.0.70/temp Using JRE_HOME: /usr Using CLASSPATH: /root/apache-tomcat-7.0.70/bin/bootstrap.jar:/root/apache-tomcat-7.0.70/bin/tomcat-juli.jar Tomcat started.
進入到日誌文件中,查看啓動效果;
# cd logs/ # tail -f catalina.out
在Linux環境下,其實並非全部端口都是開放的,如需添加開放端口,可執行以下命令:
# /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT # 添加開放端口 # /etc/init.d/iptables save # 保存配置 # service iptables restart # 重啓 iptables # netstat -ntlp # 查看開放的端口號
在客戶端設備上進行驗證;
5、反向代理配置操做案例(一)
實現效果
準備工做
一、 在 Windows 客戶端的Host文件中配置域名和IP的對應關係;
在Windows中C:\Windows\System32\drivers\etc路徑下找到Hosts文件,經過本地以管理員身份打開記事本,找到Hosts文件的路徑,進行添加域名和IP;
添加完畢後,保存,切記不要是.txt格式的文件,直接替換掉原有的Hosts文件便可;
192.168.1.10 www.jacktian.com
除Windows客戶端配置外,Nginx服務器也須要配置;
192.168.1.10 www.jacktian.com
添加環境變量
# vim /etc/profile.d/nginx.sh export PATH=/usr/local/nginx/sbin:$PATH
二、 在Nginx進行請求轉發的反向代理配置,並在末尾行添加include vhost/*.conf;
# vim /usr/local/nginx/conf/nginx.conf 35 server { 36 listen 8000; 37 server_name localhost; 38 39 #charset koi8-r; 40 41 #access_log logs/host.access.log main; 42 43 location / { 44 root html; 45 index index.html index.htm; 46 } 79 } 116 include vhost/*.conf;
在/usr/local/nginx/conf/目錄下,建立vhost目錄,並在該目錄下建立tomcat.conf,並添加以下配置;
# mkdir vhost # cd vhost/ # ls tomcat.conf # vim tomcat.conf 1 server { 2 listen 80; 3 server_name 192.168.1.10; 4 5 location / { 6 proxy_pass http://192.168.1.10:8080; 7 } 8 }
在Windows客戶端進行訪問域名:www.jacktian.com驗證;
6、反向代理配置操做案例(二)
實現效果
使用Nginx反向代理,根據所訪問的路徑跳轉至不一樣端口的服務中。
Nginx 監聽端口爲:9001
訪問http://192.168.1.10:9001/abc直接跳轉至192.168.1.10:8080
訪問http://192.168.1.10:9001/def直接跳轉至192.168.1.10:8081
準備工做
一、 準備2臺Tomcat服務器,分別爲8080和8081端口;
在/root目錄下建立兩個Tomcat目錄;
# mkdir tomcat8080 # mkdir tomcat8081
將apache-tomcat-7.0.70.tar.gz壓縮包分別cp到兩個目錄中;
# cp -r /root/apache-tomcat-7.0.70.tar.gz /root/tomcat8080 # cp -r /root/apache-tomcat-7.0.70.tar.gz /root/tomcat8081
查看Tomcat進程
# ps -ef | grep tomcat root 3974 3280 16 12:15 pts/3 00:00:00 grep tomcat root 64376 1 0 Jun07 pts/2 00:05:37 /usr/bin/java -Djava.util.logging.config.file=/root/apache-tomcat-7.0.70/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.endorsed.dirs=/root/apache-tomcat-7.0.70/endorsed -classpath /root/apache-tomcat-7.0.70/bin/bootstrap.jar:/root/apache-tomcat-7.0.70/bin/tomcat-juli.jar -Dcatalina.base=/root/apache-tomcat-7.0.70 -Dcatalina.home=/root/apache-tomcat-7.0.70 -Djava.io.tmpdir=/root/apache-tomcat-7.0.70/temp org.apache.catalina.startup.Bootstrap start
將原有的Tomcat服務kill掉,並進行查看是否已經中止;
# kill -9 64376 # ps -ef | grep tomcat root 3994 3280 7 12:23 pts/3 00:00:00 grep tomcat
修改tomcat8080的配置文件,以下;
# vim /root/tomcat8080/apache-tomcat-7.0.70/conf/server.xml 22 <Server port="8005" shutdown="SHUTDOWN"> 71 <Connector port="8080" protocol="HTTP/1.1" 93 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
修改tomcat8081的配置文件,以下;
# vim /root/tomcat8081/apache-tomcat-7.0.70/conf/server.xml 22 <Server port="8015" shutdown="SHUTDOWN"> 71 <Connector port="8081" protocol="HTTP/1.1" 93 <Connector port="8019" protocol="AJP/1.3" redirectPort="8443" />
啓動tomcat8080和tomcat8081的服務;
# ./tomcat8080/apache-tomcat-7.0.70/bin/startup.sh # ./tomcat8081/apache-tomcat-7.0.70/bin/startup.sh
驗證
在客戶端瀏覽器地址欄中輸入:192.168.1.10:8080和192.168.1.10:8081查看頁面結果;
Tomcat8080建立文件夾和測試頁面
# cd /root/tomcat8080/apache-tomcat-7.0.70/webapps/ # mkdir abc # cd abc/ # vim 20200320.html <h1>welcome to tomcat 8080!</h1>
Tomcat8081建立文件夾和測試頁面
# cd /root/tomcat8081/apache-tomcat-7.0.70/webapps/ # mkdir def # cd def/ # vim 20200320.html <h1>welcome to tomcat 8081!</h1>
驗證
在客戶端瀏覽器地址中輸入:http://192.168.1.10:8080/abc/20200320.html進行查看;
二、 配置反向代理至Nginx服務器nginx.conf配置文件;
# vim /usr/local/nginx/conf/nginx.conf 84 server { 85 listen 9001; 86 server_name 192.168.1.10; 87 88 location ~ /abc/ { 89 proxy_pass http://192.168.1.10:8080; 90 } 91 92 location ~ /def/ { 93 proxy_pass http://192.168.1.10:8081; 94 } 95 }
location 配置指令說明:
用法:用於匹配 URI;
語法格式:
location [ = | ~ | ~* | ^~ ] uri { }
=:用於不含正則表達式的 URI 前,要求請求字符串與 URI 匹配,如匹配成功,將中止向下搜索並處理該請求;
~:用於表示 URI 包含正則表達式,並區分大小寫;
~*:用於表示 URI 包含正則表達式,不區分大小寫;
^~:用於不含正則表達式的 URI 前,需 Nginx 服務器找到標識 URI 和請求字符串匹配度高的 location 後,當即使用此 location 處理請求,再也不使用 location 塊中的正則 URI 的請求字符串作匹配;
若是 URI 包含正則表達式,則必需要有~或~*標識。
編輯防火牆配置文件,添加對外開放端口8080、808一、9001;
# vim /etc/sysconfig/iptables 6 -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT 7 -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT 8 -A INPUT -m state --state NEW -m tcp -p tcp --dport 8081 -j ACCEPT 9 -A INPUT -m state --state NEW -m tcp -p tcp --dport 9001 -j ACCEPT
重啓防火牆,並進行查看;
# /etc/init.d/iptables restart # service iptables status 表格:filter Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80 2 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:8080 3 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:8081 4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:9001
最後,重啓Nginx服務,或從新加載配置文件;
# cd /usr/local/nginx/ # cd sbin/ # ls nginx # ./nginx -s stop # ./nginx
驗證
在客戶端瀏覽器地址中輸入:http://192.168.1.10:9001/abc/20200320.html進行查看;
7、常見問題
當重啓Nginx服務時,出現以下報錯現象:
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
解決辦法:
當出現這種錯誤時,意味着80端口被佔用了,執行以下命令,將進程殺死後,啓動Nginx。
# fuser -k 80/tcp # ./nginx
總結經過本篇文章,介紹了什麼是正向代理和反向代理、正向代理和反向代理的用途、正向代理配置實操、反向代理前期準備工做實操、反向代理配置操做案例(一):經過在Windows客戶端設備修改Hosts文件,添加域名及IP,Nginx服務器上配置轉發反向代理,客戶端經過訪問Nginx服務器的域名自動跳轉至Tomcat的主頁面中,反向代理配置操做案例(二):使用Nginx反向代理,根據所訪問的路徑跳轉至不一樣端口的服務中等;