作者:JackTian
微信公衆號:傑哥的IT之旅(ID:Jake_Internet)
LAMP 系列導讀
01. LAMP 系列教程(一)| 詳解 Linux 環境下部署 HTTPD 服務
02. LAMP 系列教程(二)| 如何在 Linux 環境下部署 AWStats 分析系統來監控 Web 站點?
03. LAMP 系列教程(三)| 一文讀懂 HTTPD 服務的訪問控制
04. LAMP 系列教程(四)| MySQL 數據庫系統(一)
05. LAMP 系列教程(五)| MySQL 數據庫系統(二)- SQL語句的基本操作
06. LAMP 系列教程(六)| MySQL 數據庫系統(三)- 數據庫的用戶授權
07. LAMP 系列教程(七)| MySQL 數據庫系統(四)- 數據庫的備份與恢復
08. LAMP 系列教程(八)| 帶你輕鬆玩轉 LAMP 網站架構平臺(一)
09. LAMP 系列教程(九)| LAMP 架構應用案例 - 部署 PHPMyAdmin 系統(二)
LNMP 系列導讀
01. Nginx 系列教程(一)| 手把手教你在 Linux 環境下搭建 Nginx 服務
在上一篇文章中,通過最簡單的方式讓大家如何在 Linux 環境下搭建 Nginx 服務,同時還收到好幾位讀者的留言期待後續的 Nginx 系列的文章,那麼我們不僅僅是爲了搭建服務而搭建,同時要把它利用起來,爲我們提供更多的服務。在今天的文章中,進一步帶領大家認識什麼是 Nginx 的正向代理
與反向代理
以及通過這兩個代理做一個簡單的實操案例;
一、正向代理
正向代理
:你可以這樣理解,就是把局域網以外的 Internet 想象成一個外網 Internet,那麼當我們局域網中的客戶端設備要訪問局域網以外的 Internet 時,需在客戶端瀏覽器中配置代理服務器,然後通過代理服務器來進行訪問,將訪問到的局域網以外的 Internet 網站內容返回給客戶端,而不是通過局域網中的客戶端設備直接訪問到局域網以外的 Internet 網站中,這種代理服務稱之爲:正向代理
。
正向代理的用途:
- 訪問原來無法訪問的資源;
- 可做緩存,加速訪問資源;
- 對客戶端訪問授權,上網進行認證;
- 代理可以記錄用戶訪問記錄等,且對外隱藏用戶信息;
二、反向代理
反向代理
:無需在客戶端進行配置即可訪問,我們只需要將請求發送給反向代理服務器
,然後由反向代理服務器
去選擇要訪問的目標服務器
獲取數據後,在返回給客戶端
。這裏你可以這樣理解:反向代理服務器
和目標服務器
對外訪問的就是一臺服務器,知道的是反向代理服務器
地址,其實隱藏了真實服務器的 IP 地址, 這種代理服務稱之爲:反向代理
。
反向代理的用途:
- 保證內網安全,通常將反向代理作爲公網訪問地址,Web 服務器是內網;
- 負載均衡,通過反向代理服務器來優化網站的負載;
三、正向代理配置實操
在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
服務器地址即可;
四、反向代理前期準備工作實操
實現效果:通過客戶端
,在瀏覽器地址欄中輸入Nginx
服務器地址,即可訪問 Tomcat 頁面。
準備工作
1、 在Nginx
服務器上安裝Tomcat
,使用默認端口:8080
,解壓壓縮包,進入到Tomcat
的bin
目錄下,執行./startup.sh
命令啓動Tomcat
服務;
2、 添加對外開放端口,保存配置並進行查看;
3、 通過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 # 查看開放的端口號
在客戶端設備上進行驗證;
五、反向代理配置操作案例(一)
實現效果
準備工作
1、 在 Windows 客戶端的Host
文件中配置域名
和IP
的對應關係
在Windows中C:\Windows\System32\drivers\etc
路徑下找到Hosts
文件,通過本地以管理員身份打開記事本,找到Hosts
文件的路徑,進行添加域名
和IP
;
添加完畢後,保存,切記不要是.txt
格式的文件,直接替換掉原有的Hosts
文件即可;
192.168.1.10 www.jacktian.com
除Windows
客戶端配置外,Nginx
服務器也需要配置;
# vi /etc/hosts
192.168.1.10 www.jacktian.com
添加環境變量
# vim /etc/profile.d/nginx.sh
export PATH=/usr/local/nginx/sbin:$PATH
2、 在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
驗證;
六、反向代理配置操作案例(二)
實現效果
使用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
準備工作
1、 準備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
進行查看;
2、 配置反向代理至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
、8081
、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
進行查看;
七、常見問題
當重啓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
反向代理,根據所訪問的路徑跳轉至不同端口的服務中等;
來和上萬名讀者一起見證彼此成長!
掃描下方二維碼,添加傑哥微信,備註:地區/城市-職業方向/學校-暱稱
,即可加入傑哥的IT之旅讀者羣
,羣內僅供學習交流、日常互動、資源分享、經驗分享等,一定要記得備註,我會盡快通過好友驗證的。
👆長按識別,添加微信
推薦閱讀
1、GitHub 標星 2.5K+!教你通過玩遊戲的方式學習 VIM!
2、GitHub 標星 8K+!一款開源替代 ls 的工具你值得擁有!
3、沒有一行代碼,「2020 新冠肺炎記憶」這個項目卻登上了 GitHub 中文趨勢榜第一!
4、RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 實現無人值守安裝
5、Linux 環境下實戰 Rsync 備份工具及配置 rsync+inotify 實時同步
6、爲什麼要學習 Markdown?究竟有什麼用?
7、萬字長文帶你瞭解最常用的開源 Squid 代理服務器
8、一款常用的 Squid 日誌分析工具
9、Nginx系列教程(一)| 手把手教你在Linux環境下搭建Nginx服務
今天的推薦不知道大家喜歡嗎?如果你喜歡,請在文章底部留言和點贊,以表示對我的支持,你們的留言
和點贊
是我持續更新的動力哦,感謝大家!
1、點個贊,讓更多的人看到這篇文章,順便激勵下我,嘻嘻。
2、關注我的原創微信公衆號「傑哥的IT之旅」
,專注於IT技術乾貨文章,以及不定期的分享學習資料,實用工具,面試經驗
等,當然了還有內推機會
哦,期待你的關注!