使用Apache的rewrite功能實現內部重定向
場景:實驗室有一臺機器(稱為nat_server吧)擁有外網地址,在另外一臺內部服務器上提供web服務(稱之為web_server),我們想讓外網的用戶能夠通過nat_server能夠訪問web_server。
實現方案
使用iptables的snat,dnat功能
使用ipfilter的map功能
使用apache的rewrite功能
優缺點:
方法1和2的是通過端口轉發的功能來實現的,對用戶端有要求,比如說我需要通過http://nat_server:8080的方式來訪問web_server,而且有可能受上級路由器打開端口的限制,如果上級路由器不允許使用8080端口的話,那就必須換另外一個端口了。我配置了半天沒有弄成功,郁悶的是,還不知道是什么原因。
方法3是我推薦的,因為我們原本就在nat_server上開了httpd服務,使用這種方式我可以通過http://nat_server/to_web_s...的方式來訪問內網服務器
實現細節
這里給出我對兩種方案的配置,我使用了iptables來實現端口重發,加入的規則如下
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
iptables -A FORWARD -p tcp --destination-port 80 --destination 10.20.10.204 -j ACCEPT
iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.20.10.204:80
iptables -t nat -A POSTROUTING -s 10.20.10.0/8 -d 10.20.10.204 -p tcp -m tcp --dport 80 -j SNAT --to-source 10.20.10.208
不知道什么原因,我的這個配置沒有成功,以后再解決它。
對于apche的重寫規則,其實也是比較容易的,需要修改如下地方:
在這里我們假定
DocumentRoot "/var/www/html"
ServerRoot "/etc/httpd"
1) /etc/httpd/conf/httpd.conf 文件
# 加載 rewrite 模塊
LoadModule rewrite_module modules/mod_rewrite.so
# 允許符號連接和覆蓋,否則rewrite不起作用
Options FollowSymLinks
AllowOverride All
# 允許符號連接和覆蓋,否則rewrite不起作用
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
2) 在 /var/www/html 下新建 .htaccess 文件,內容如下
RewriteEngine on
RewriteBase /
RewriteRule ^forum$ forum/ [L]
3) 在 /var/www/html 下創建 forum 文件加,在forum文件夾中創建 .htaccess 文件,內容如下
RewriteEngine on
RewriteBase /forum/
RewriteRule (.*)http://web_server_ip/$1[P,L]
需要注意的是,在上面的RewriteRule當中一定要寫上 [P] 標示,表示是內部重定向, [R]表示是外部重定向。 我就是因為沒有寫上P標識,耽誤了好長時間。
然后重啟httpd服務!
關鍵字:Apache rewrite 內部 重定向
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解