天天看點

使用nginx做端口轉發提供内網服務

作者:和阿文一起學技術

需求:我的電腦裡裝了兩個虛拟機。一個是nat加host-only網絡環境,一個是‘nat網絡’網絡環境。host-only的網絡的虛拟機(後文簡稱A)裡在80端口提供兩個網站服務:homestead.test和ruanwenwu.com.cn。nat網絡的虛拟機(後文簡稱B)裡在80端口提供一個網站服務:rocky.com。我現在希望我的區域網路中的其他電腦能通路我電腦裡的這三個服務。

解決方案:使用nginx做端口轉發。

一、網絡環境

A的網絡:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
        inet6 fe80::a00:27ff:fe9e:e528  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:9e:e5:28  txqueuelen 1000  (Ethernet)
        RX packets 32281  bytes 36852695 (36.8 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 12531  bytes 1588799 (1.5 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.10  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::a00:27ff:fee0:1b57  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:e0:1b:57  txqueuelen 1000  (Ethernet)
        RX packets 28364  bytes 5341677 (5.3 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 55262  bytes 111451643 (111.4 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 12857  bytes 4268810 (4.2 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 12857  bytes 4268810 (4.2 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
           

A有兩個網卡,一個是NAT的,一個是Host-only的。192.168.10.10是host-only的位址。

B的IP是10.0.0.3,映射80端口到我本機(macbook)8080端口。

二、nginx配置

worker_processes  1;


events {
    worker_connections  1024;
}

http{
    upstream rww{
	server 127.0.0.1:8080;
    }
    upstream ruanwenwu{
	server 192.168.10.10:80;
    }

	server {
	    listen       80;
	    server_name  rocky.com;
	    access_log logs/book.log;
	    error_log logs/book.error;
	    
	    location / {
		proxy_set_header Host $host;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_pass http://rww;
	    }
	}

	server {
	    listen       80;
	    server_name  ruanwenwu.com.cn;
	    access_log logs/movie.log;
	    error_log logs/movie.error;
	    
	    location / {
		proxy_set_header Host $host;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_pass http://ruanwenwu;
	    }
	}

	server {
	    listen       80;
	    server_name  homestead.test;
	    access_log logs/movie.log;
	    error_log logs/movie.error;
	    
	    location / {
		proxy_set_header host $host;
		proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
		proxy_pass http://ruanwenwu;
	    }
	}

}           

三、本機Host配置

127.0.0.1       rocky.com
127.0.0.1 ruanwenwu.com.cn
127.0.0.1 homestead.test           

四、總結

就是通過nginx開放本機的80端口給區域網路的使用者通路。然後再通過nginx的端口轉發功能将對應的請求轉發到對應的電腦上。同一台虛拟機上多個網站都采用80端口提供服務的,使用server_name來區分。

喜歡阿文的幫助,覺得這篇文章對你有幫助就給阿文一個免費的點贊、關注吧,謝謝支援~

繼續閱讀