我尝试使用Docker设置一个Web服务器,所以我将使用我的服务器“server.domain.com”的主域用于管理员用途(server.domain.com/phpmyadmin,等等...)我想要将所有其他域重定向到在端口81上侦听的apache容器。
所以我在default.conf
上有这段代码:
server {
listen 80;
listen [::]:80 default_server;
location / {
proxy_pass http://web/;
}
}
main.conf
:
server {
listen 80;
listen [::]:80;
server_name server.domain.com;
location /phpmyadmin/ {
proxy_pass http://phpmyadmin/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
(更新后的conf)
我的nginx.conf
:
user nginx;
worker_processes 2;
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;
gzip_comp_level 5;
gzip_http_version 1.0;
gzip_min_length 0;
gzip_types *;
gzip_vary on;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites/*;
}
'docker-compose.yml'的一部分:
nginx:
build: ./server/proxy
ports:
- "80:80"
#volumes:
#- nginx_conf:/etc/nginx/
networks:
- web_network
depends_on:
- web
- phpmyadmin
- panel
此时我使用“depends_on”在我的配置中使用容器的名称,但你只谈论网络,所以我认为“depends_on”没有义务?
但这给了我一个错误connection refused
。
如果我将127.0.0.1
替换为server.domain.com
,则第一个虚拟主机无效,并重定向到nginx webRoot。
所以我不知道为什么......
谢谢!
答案 0 :(得分:0)
据我所知,这个nginx容器正在侦听端口80,所有进入你机器的连接请求都会被传递给它。所以它只是一个代理容器。我有一个类似实现的项目。让我们尝试一下。
为了清晰起见,我建议您有2个配置文件。
1)main.conf - 将为您的" server.domain.com"
提供服务server {
listen 80;
listen [::]:80;
server_name server.domain.com;
location /phpmyadmin {
proxy_pass http://server.domain.com:82;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
That's all of the configuration you basically need here. Later if you need them, you'll pass headers.
2)default.conf - 将服务于任何其他域
server {
listen 80;
listen [::]:80 default_server;
location / {
proxy_pass http://server.domain.com:81;
}
}
此配置假定:
1)有一个运行apache的容器,通过端口81进入您机器的请求将被传递到apache2容器的端口80(或者它正在收听的任何内容)
2)有一个运行phpmyadmin的容器,来自端口82的机器的请求将被传递到phpmyadmin容器的端口80(或其他......)
您应该考虑的一些改进:
1)如果您使用docker-compose启动所有这些容器,您将能够为它们设置虚拟网络。这将允许您按名称直接将传递请求代理到容器。在我的项目中,我这样做:
proxy_pass http://adminer;
其中adminer定义为:
adminer:
image: phpmyadmin/phpmyadmin
volumes:
- ./db_interface/conf/config.inc.php/:/etc/phpmyadmin/config.inc.php
networks:
- demo_webnet
- prod_webnet
如果您有任何疑问,我会解释。
2)您可以将另一个nginx服务器与您的apache2服务器一起放在其容器中。他们在捆绑中工作得很好。 Nginx更适合服务器静态。在您的情况下,Apache2更适合PHP。我也可以告诉你如何做到这一点。
如果你需要的话
看起来您正在尝试做类似于我为公司的需求做的事情。如果您有兴趣,我可以让您访问我的项目。我已经用docker构建了一个完整的服务器基础架构,它现在完美地部署在我们的服务器上。简而言之,它的工作原理如下:
使用phpmyadmin访问两个数据库服务的容器
任何请求都来自nginx代理。
还有很多很酷的东西,如cron配置为在检测到文件更改,监督服务,https支持等时自动加载apache2和nginx。
我计划进一步发展它作为一个开源项目,无论谁有兴趣都应该让我知道。