[英]docker running nginx as proxy to another webserver (on pi)
我目前的小項目有點不知所措。 (雖然應該沒那么難)
我正在嘗試在我的 Pi 上使用 docker 運行多個網頁(用於測試目的),這些網頁都應該可以使用 PI 的 IP 訪問。
我目前運行一個 minimL LIGHTTPD :(基於樹脂/rpi-raspbian 圖像)
docker run -d -v <testconfig>:/etc/lighttpd -p <pi-ip>:8080:80 <image name>
(使用 pi 上的瀏覽器和網絡中的其他計算機可以訪問此服務器)
對於 nginx,我使用一個簡單的配置(從http://nginx.org/en/docs/beginners_guide.html開始)運行另一個容器,其中包含一個網頁和圖像來測試容器配置。 可以使用<pi-ip>
:80 訪問此容器
然后我嘗試為這些位置添加一個代理:(我玩過所以現在有 3 個位置用於相同的重定向)
location /prox1/{
proxy_pass http://<pi-ip>:8080
}
location /prox2/{
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://<pi-ip>:8080
}
location /prox3/{
fastcgi_pass <pi-ip>:8080;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string
}
版本 1 和 2 給出了 404(我嘗試添加重寫,但是由於 /prox1/ 被剪切,我 'nginx 自行重定向)。 版本 3 產生超時。
現在我不確定我是否仍然需要在 nginx 端進行挖掘,或者我必須在容器之間的 docker 端添加一個連接。
PS:Pi 正在運行 ArchForArm(使用 Xfce 作為桌面),因為我在 raspberian 存儲庫中找不到 docker-compose。
-- 編輯 ---:我目前手動啟動所有內容。 (所以沒有撰寫文件)
LIGHTTPD 開始於:
docker run -d --name mylighttpd -v <testconfig>:/etc/lighttpd -p <pi-ip>:8080:80 <image name>
如果我理解正確,它現在正在偵聽本地網絡(在<pi-ip>
范圍內)端口 8080,它代表測試網絡服務器的端口 80。(我添加了 ..name 所以它更容易停止它。)
nginx 是這樣啟動的:
docker run --name mynginx --rm -p <pi-ip>:80:80 -v <config>:/data <image name>
8080 已添加到 Docker 文件的公開中。
我目前認為我誤解了同一台機器上兩個客戶端的連接,應該添加一個虛擬網絡,我目前正試圖在那里找到一些碼頭。
PS:我沒有使用 repo 中已經存在的 nginx-zeroconf,因為它告訴我它無法讀取已安裝的 docker 版本。 (並且與 composer 一起使用它的唯一示例還需要另一個容器,這似乎不適用於我的架構。)
-- edit2 --:對於簡單的proxy_pass,問題可能是URL。 我在“www”文件夾中添加了一個更深的文件夾“prox1”,其中包含一個索引文件,當我請求該頁面時會顯示該文件夾。
似乎<pi-ip>
:80/prox1/ 被重定向到<pi-ip>
:8080/prox1/ 但如果我嘗試重寫它(在“location /prox1/”內),它似乎首先刪除了 prox1,並且然后決定它現在是原始位置的一部分。 <pi-ip>
:80/
PS:我知道將系統放置在另一個連接中可能比“橋接”更好,並且只公開代理,但我正在嘗試逐步學習這些東西。
-- edit3 --:現在正在嘗試撰寫,但似乎我遇到了另一個我不明白的部分(為什么我想在不先撰寫的情況下使其工作)。
我嘗試遵循http://docs.master.dockerproject.org/compose/compose-file/#ipv4-address-ipv6-address
networks:
backbone:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.16.238.0/16
gateway: 172.16.238.1
services:
nginx:
image: <nginx-image>
ports: 80:80
volumes:
- <config>:/data
depends_on:
- lighttpd
networks:
backbone:
ipv4_address: 172.16.238.2
lighttpd:
image: <lighttpd-image>
ports: 8080:80
volumes:
- <testconfig>:/etc/lighttpd
networks:
backbone:
ipv4_address: 172.16.238.3
現在我必須找出為什么我得到“僅當連接到具有用戶配置的子網的網絡時才支持用戶特定的 IP 地址”,我假設主網絡塊創建了一個名為“骨干網”的網絡。
-- edit4 --:似乎ip塊必須與我見過的所有碼頭不同,正確的形式是:
...
networks:
backbone:
ipv4_address: 172.16.0.2/16
...
現在我必須弄清楚如何刪除 URL 的一部分,我很高興去。
核心問題似乎是缺少 nginx 參數proxy_redirect ,我發現漫無邊際的碼頭,當前的 nginx.conf 是:(/data/www 包含一個 index.html 與 /data/images 中的某些圖像的相對鏈接)
worker_processes auto;
events {
worker_connections 1024;
}
http {
server {
listen 80;
location / {
root /data/www;
}
location /images/ {
root /data;
}
location /prox0/{
proxy_pass http://lighttpd:80;
proxy_redirect default;
proxy_buffering off;
}
}
}
在本地 Ip 上手動啟動似乎可行,但 docker-compose 更容易:(如果不使用 compose,請將lighttpd:80替換為用於啟動服務器的 ip 和端口。)
networks:
backbone:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.16.238.0/16
gateway: 172.16.238.1
services:
nginx:
image: <nginx-image>
ports: 80:80
volumes:
- <config>:/data
depends_on:
- lighttpd
networks:
backbone:
ipv4_address: 172.16.0.2
lighttpd:
image: <lighttpd-image>
ports: 8080:80
volumes:
- <testconfig>:/etc/lighttpd
networks:
backbone:
ipv4_address: 172.16.0.3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.