日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Nginx 反向代理 一个IP代理多个域名,不区分端口,类似windows虚拟机。

發(fā)布時間:2023/12/19 综合教程 30 生活家
生活随笔 收集整理的這篇文章主要介紹了 Nginx 反向代理 一个IP代理多个域名,不区分端口,类似windows虚拟机。 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

簡介:

IP有限,所以我們以前使用端口來區(qū)分不同的虛擬主機,提供不同的WEB服務。

小范圍還湊活,一旦規(guī)模擴大,地址記不住了吧?端口記不住了吧?

這個時候我們可以使用DNS,域名解析,畢竟記名字比記IP和端口好記。

但是,不想但是也得但是,我們以前使用的一部分端口是沒辦法解析的。

好吧,有用過IIS的同學會考慮,用虛擬主機,綁定域名即可。多個域名解析到相同的IP,使用相同的IP,由IIS根據(jù)訪問域名來決定使用哪個虛擬主機來相應這個請求。

繼續(xù)但是,IIS是微軟家的技術,我最近部署的都是python+flask,IIS能支持么?

不過我已經(jīng)過渡到linux+docker來部署了。這時候有什么辦法來實現(xiàn)類似IIS的虛擬主機功能呢?

同一個IP地址,使用不同的訪問域名來使用不同的主機來相應請求。

可以使用Nginx的反向代理功能。

我使用的是DOCKER技術,部署docker,部署apache,部署tomcat。

一:環(huán)境安裝

1.安裝linux。

2.安裝docker。

3.安裝docker-compose。

全略

二:docker安裝Nginx

1.配置nginx.yaml

version: "3" #版本3
services: #服務
  nginx:   #服務名
    image: nginx:stable-alpine   #鏡像名稱
    privileged: true  #高級權(quán)限
    tty: true         #開一個終端
    container_name: nginx  #自定義容器名
    restart: always
    networks:       #網(wǎng)絡
    - et_net         #屬于網(wǎng)絡mynet
    ports:          #開放端口映射
    - 80:80     #冒號左邊是宿主機開放端口,冒號右邊是容器開放端口
    #volumes:
    #- ./nginx.conf:/etc/nginx/nginx.conf:ro
    #command: [nginx-debug, '-g', 'daemon off;'] #映射mariadb的數(shù)據(jù)庫文件存儲路徑,冒號左邊是宿主機路徑,冒號右邊是容器內(nèi)路徑
networks:  #關于網(wǎng)絡的服務
  et_net:   #聲明網(wǎng)絡mynet

以上內(nèi)容保存為nginx.yaml即可。

2.啟動nginx

運行

docker-compose -f nginx.yaml up -d

3.測試nginx

這樣就配置好了,在你操作的工作站訪問linux的IP,就能看到nginx啟動成功如下:

三:docker安裝apache

1.配置apache.yaml

version: "3" #版本3
services: #服務
  apache:   #服務名
    image: httpd:alpine  #鏡像名稱
    privileged: true  #高級權(quán)限
    tty: true         #開一個終端
    container_name: apache1  #自定義容器名
    restart: always
    networks:       #網(wǎng)絡
    - et_net         #屬于網(wǎng)絡et_net
    ports:          #開放端口映射
    - 8080:80     #冒號左邊是宿主機開放端口,冒號右邊是容器開放端口
networks:  #關于網(wǎng)絡的服務
  et_net:   #聲明網(wǎng)絡mynet

  以上內(nèi)容保存為apache.yaml即可

2.啟動apache

運行

docker-compose -f apache.yaml up -d

3.測試訪問apache

這樣就配置好了,在你操作的工作站訪問linux的IP:8080,就能看到apache啟動成功如下:

四:docker安裝tomcat

1.配置tomcat.yam

version: "3" #版本3
services: #服務
  tomcat:   #服務名
    image: tomcat  #鏡像名稱
    privileged: true  #高級權(quán)限
    tty: true         #開一個終端
    container_name: tomcat  #自定義容器名
    restart: always
    networks:       #網(wǎng)絡
    - et_net         #屬于網(wǎng)絡mynet
    ports:          #開放端口映射3306-->3306
    - 8081:8080     #冒號左邊是宿主機開放端口,冒號右邊是容器開放端口
networks:  #關于網(wǎng)絡的服務
  et_net:   #聲明網(wǎng)絡mynet

2.啟動tomcat

docker-compose -f tomcat.yaml up -d

3.測試tomcat

這樣就配置好了,在你操作的工作站訪問linux的IP:8081,就能看到apache啟動成功如下:

五:配置Nginx

1.復制nginx配置文件模板

已知nginx的配置文件為

/etc/nginx/nginx.conf

在linux執(zhí)行

 docker cp nginx:/etc/nginx/nginx.conf ./nginx.conf

即可將nginx的配置文件從docker容器中復制到linux宿主機的當前文件夾。

2.修改nginx配置文件

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
	
	upstream s1.local {
				 server apache;
	}

	upstream s2.local {
				 server tomcat:8080;
	}

	server {
		listen       80;
		server_name  s1.local;
		index  index.html index.htm;
		location / {
			proxy_set_header   Host             $host;
			proxy_set_header   X-Real-IP        $remote_addr;
			proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
			proxy_pass http://s1.local;
		}
	}
	
	server {
		listen       80;
		server_name  s2.local;
		index  index.html index.htm;
		location / {
			proxy_set_header   Host             $host;
			proxy_set_header   X-Real-IP        $remote_addr;
			proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
			proxy_pass http://s2.local;
		}
	}
}

  

紅色部分是添加進去的。

upstream s1.local {
				 server apache;
	}

這一部分是定義一組被代理的服務器信息,upstream 和 server 是固定格式。

s1.local 是自定義的名字,apache是apache容器的名字

upstream s2.local {
				 server tomcat:8080;
	}

  定義s2.local,是tomcat的服務器信息。

重點:定義被代理的服務器,直接定義被代理的容器的名字,如果默認端口是80,那么定義被代理的服務器時不需要定義端口,如果默認端口不是80,才需要定義端口。

查看端口有兩個方法:1,到hub.docker.com查看說明。2,直接不配置端口,運行容器,用docker ps -a 看運行狀態(tài),也可以看到默認端口是多少。

server {
		listen       80;
		server_name  s2.local;
		index  index.html index.htm;
		location / {
			proxy_set_header   Host             $host;
			proxy_set_header   X-Real-IP        $remote_addr;
			proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
			proxy_pass http://s2.local;
		}
	}

  這是定義監(jiān)聽端口和監(jiān)聽域名,指向被代理服務器的。

s2.local是監(jiān)聽的域名,即訪問這個域名,則用這條配置信息來指向某個被代理的服務器。

http://s2.local,是剛才配置的被代理服務器的自定義名字和協(xié)議。

3.重啟nginx

我們修改了Nginx.conf配置文件,而且文件時在linux宿主機,不在容器里面。

需要修改一下啟動配置文件重啟才能生效。

 #volumes:
 #- ./nginx.conf:/etc/nginx/nginx.conf:ro

  第一次的nginx.yaml當中注釋掉了這兩行,取消注釋即可。

意思時把宿主機的nginx.conf 映射到nginx容器當中,并且只讀。

nginx.yaml 和 nginx.conf 在同一個目錄下就可以了。

首先關閉原來的nginx

docker-compose -f nginx.yaml down

再重新啟動nginx 

docker-compose -f nginx.yaml up -d

4.測試訪問

有如下幾個地址需要測試:

apache: IP:8080

tomcat: IP:8081

nginx: IP

訪問這三個地址,確認三個容器都是工作正常的。

編輯host文件

增加

192.168.1.4 s1.local
192.168.1.4 s2.local

即將 s1.local 和 s2.local 解析到linux服務器去。部署的時候應該去改寫DNS服務器。

然后就可以訪問 s1.local 和 s2.local 了。

五:關閉apache和tomcat的外部端口

由于我們在每個yaml當中都定義了 et_net 這個虛擬網(wǎng)絡。并且在配置Nginx時,對被代理服務器的定義也使用了docker內(nèi)部虛擬網(wǎng)絡。

那么我們可以關閉apache和tomcat的外部端口。

剛開始開放apache和tomcat的外部端口,是為了對容器工作狀態(tài)進行測試。

服務器還是開的端口越少越好。

ports:          #開放端口映射3306-->3306
 - 8081:8080     #冒號左邊是宿主機開放端口,冒號右邊是容器開放端口

在apache.yaml 和 tomcat.yaml 當中注釋掉這兩行即可。

六:小結(jié)

在Listen ip:port; 這個指令行中,加參數(shù)default

這個server端就會是這個ip的默認站點。

server {
        listen       80 default;

至此我們已經(jīng)實現(xiàn)了一個nginx根據(jù)訪問域名不同,反向代理到不同的后端服務器去。

需要注意的是,proxy_pass http://s2.local; 這行配置時包含了http協(xié)議名稱,要根據(jù)你后臺被代理的服務器來配置協(xié)議。

據(jù)說nginx也支持mail服務器,也就是說不僅支持http和https,是否支持ftp?ssl?就需要查資料或做實驗了。

nginx也支持動靜態(tài)分離服務器。當需要的時候再來寫筆記配置動靜態(tài)分離。

總結(jié)

以上是生活随笔為你收集整理的Nginx 反向代理 一个IP代理多个域名,不区分端口,类似windows虚拟机。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。