我的目标是部署多个webapp并通过子域访问它们,我目前正在不同的端口上运行它们,我在服务器上运行nginx,容器正在运行apache。
docker run -p 8001:80 -d apache-test1
docker run -p 8002:80 -d apache-test2
我可以通过转到
来访问它们http://example.com:8001
但我喜欢通过子域来访问它们
http://example.com:8001 -> http://test1.example.com
http://example.com:8002 -> http://test2.example.com
我在服务器上运行nginx并使用以下服务器设置
server {
server_name test1.anomamedia.com;
location / {
proxy_redirect off;
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://localhost:8001;
}
}
server {
server_name test2.anomamedia.com;
location / {
proxy_redirect off;
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://localhost:8002;
}
}
如果有任何帮助,这是我的Dockerfile
FROM ubuntu
RUN apt-get update
RUN apt-get -y upgrade
RUN sudo apt-get -y install apache2 php5 libapache2-mod-php5
# Install apache, PHP, and supplimentary programs. curl and lynx-cur are for debugging the container.
RUN DEBIAN_FRONTEND=noninteractive apt-get -y install apache2 libapache2-mod-php5 php5-mysql php5-gd php-pear php-apc php5-curl curl lynx-cur
# Enable apache mods.
RUN a2enmod php5
RUN a2enmod rewrite
EXPOSE 80
# Copy site into place.
ADD html /var/www/html
# Update the default apache site with the config we created.
ADD apache-config.conf /etc/apache2/sites-enabled/000-default.conf
# By default, simply start apache.
CMD /usr/sbin/apache2ctl -D FOREGROUND
答案 0 :(得分:2)
我有类似的问题。此外,我经常需要添加和删除容器,所以我不想每次都编辑nginx conf。我的解决方案是使用jwilder / nginx-proxy。
然后你只需启动具有暴露端口(--expose 80
而不是-p 80:80
)的容器并添加env变量:
-e VIRTUAL_HOST=foo.bar.com
不要忘记使用正确的标头转移您的主要nginx流量:
server {
listen 80;# default_server;
#send all subdomains to nginx-proxy
server_name *.bar.com;
#proxy to docker nginx reverse proxy
location / {
proxy_set_header X-Real-IP $remote_addr; #for some reason nginx
proxy_set_header Host $http_host; #doesn't pass these by default
proxy_pass http://127.0.0.1:5100;
}
}
答案 1 :(得分:0)
看看nginx-proxy
项目(https://github.com/jwilder/nginx-proxy)。我在博客中写了一个教程,演示了您要使用它的确切目的:https://blog.florianlopes.io/host-multiple-websites-on-single-host-docker
此工具会自动将请求转发到适当的容器(通过VIRTUAL_HOST
容器环境变量基于子域)。
例如,如果要通过test1.example.com访问容器,只需将VIRTUAL_HOST
容器环境变量设置为test1.example.com
。