極簡·Nginx常規操作

一、教程目的

使用Docker搭建Nginx,進行最基本的反向代理操作,實現 :

  • 訪問Nginx的默認頁面
  • 通過Nginx訪問自定義的頁面
  • 通過Nginx對ip進行代理

二、教程環境

  • 系統 : winsows10
  • 軟件 : Docker for Desktop

三、詳細設計

3.1 端口映射規則

宿主機端口 容器端口
8080 80
8081 81
8082 82

訪問宿主機的8080端口,相當於訪問容器的80端口(即Nginx的默認端口);
其它以此類推。

3.2 新建容器

docker run -itd -p 8080:80 -p 8081:81 -p 8082:82 nginx

運行結果

3.3 修改配置文件

本容器中nginx.conf的位置爲 /etc/nginx/nginx.conf


在配置文件最後一行的意思是使用默認的配置文件,此處將其註釋掉,以使用自己的配置

3.3.1 默認代理配置

在nginx.conf文件的http塊中添加入以下代碼

#1.配置80端口的反向代理
server{
    #監聽Nginx80端口
    listen 80;    
    #配置服務名,若無特殊配置,localhost即指代宿主機的127.0.0.1
    server_name localhost;
    #設置轉發
    location / {
         #首頁文件的目錄
         root /usr/share/nginx.html;
         #默認的首頁文件
         index index.html index.htm;
    }
}

配置容器80端口,實現訪問宿主機 http://127.0.0.1:8080訪問到Nginx的默認歡迎界面

3.3.2 訪問自定義頁面

在/home目錄下新建demo文件夾,創建a.html文件,修改其內容爲

<p>Successfully implemented the proxy to the HTML file<p>

在nginx.conf文件的http塊中加入以下代碼

#2.配置81端口的反向代理
server{
    #監聽Nginx的81端口
    listen 81;    
    #配置服務名,若無特殊配置localhost,即指代本機的127.0.0.1
    server_name localhost;
    #設置轉發
    location / {
         #設置我們自定義文件的目錄
         root /home/demo;
         #設置我們自定義的首頁文件
         index a.html a.htm;
    }
}

配置容器81端口,實現訪問宿主機 http://127.0.0.1:8081 而訪問自定義的頁面

3.3.3 對ip進行代理

實現127.0.0.1:8082通過Nginx被反向代理127.0.0.1:5000
在nginx.conf文件的http塊中加入以下代碼

#3.配置82端口的反向代理
server{
    #監聽Nginx的82端口
    listen 82;    
    #配置服務名,若無特殊配置localhost即指代本機的127.0.0.1地址
    server_name localhost;
    #設置轉發,將127.0.0.1:82轉發到127.0.0.1:5000
    location / {
         proxy_pass 127.0.0.1:5000;
    }
}

將容器82端口反向代理到Flask應用的端口,實現宿主機訪問http://127.0.0.1:8082而能訪問到默認地址爲http://127.0.0.1:5000的Flask應用

三個Server配置完成後,nginx.conf文件中http塊結構如下

http{
    #配置1
    server{
       ...
    }
    #配置2
    server{
       ...
    }
    #配置3
    server{
      ...
    }
    ...
}

4. 重新加載配置文件

nginx -s reload

終端顯示 signal process started時才表明修改成功,若有問題會提示錯誤

四、運行結果

成功實現了對默認頁面的訪問

成功實現了對自定義頁面的代理

出現了問題,反向代理失敗

五、問題處理

1.分析問題

這裏本意是將http://127.0.0.1:82轉發到宿主機的http://127.0.0.1:5000,但Nginx處於Linux環境中,所以此處localhost實際上指的是容器內的localhost而並非宿主機內的localhost,因此出現錯誤情況。

2. 解決方法

在windows環境下可使用host.docker.internal指代宿主機的localhost地址

修改後配置文件爲

server{
    listen 82;    
    server_name localhost;
    location / {
         # 這裏使用了host.docker.internal代表宿主機的127.0.0.1
         proxy_pass http://host.docker.internal:5000;  
    }
}

重新加載配置文件

成功實現了將http://127.0.0.1:8082通過Nginx代理到http://127.0.0.1:5000
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章