nginx 将所有域重定向到另一个端口,但为管理应用程序保留一个域
nginx redirect all domain to another port but keep one domain for admin apps
我尝试使用 Docker 设置网络服务器,因此我将使用服务器 "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;
}
}
(更新配置)
还有我的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
。
如果我用 server.domain.com
替换 127.0.0.1
第一个虚拟主机不工作并重定向到 nginx webRoot.
所以我不知道为什么...
谢谢!
据我所知,这个 nginx 容器正在侦听端口 80,所有发送到您机器的连接请求都将传递给它。所以它只是一个代理容器。我有一个具有类似实现的项目。让我们试着弄明白。
为了清楚起见,我建议您有 2 个 conf 文件。
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:
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 建立了一个完整的服务器基础设施,现在它已经完美地部署在我们的服务器上了。简而言之,它的工作原理如下:
- 首先是nginx代理容器
- 带有 apache2-nginx-php5.6 的容器,用于演示应用程序
- 带有 apache2-nginx-php7.0 的容器,用于演示应用程序
- 用于生产应用程序的带有 apache2-nginx-php5.6 的容器
- 用于生产应用程序的带有 apache2-nginx-php7.0 的容器
- 带有用于演示的 maria 数据库的容器
- 用于生产的带有 maria db 的容器
带有 phpmyadmin 的容器以访问两个数据库服务
任何请求到nginx代理。
- 它匹配一些虚拟主机并被代理到内部有 apache2 和 nginx 的 4 个容器之一。
还有很多很酷的东西,比如 cron 配置为在检测到文件更改、监督服务、https 支持等时自动重新加载 apache2 和 nginx。
我打算将其进一步开发为一个开源项目,有兴趣的人请告诉我。
我尝试使用 Docker 设置网络服务器,因此我将使用服务器 "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;
}
}
(更新配置)
还有我的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
。
如果我用 server.domain.com
替换 127.0.0.1
第一个虚拟主机不工作并重定向到 nginx webRoot.
所以我不知道为什么...
谢谢!
据我所知,这个 nginx 容器正在侦听端口 80,所有发送到您机器的连接请求都将传递给它。所以它只是一个代理容器。我有一个具有类似实现的项目。让我们试着弄明白。
为了清楚起见,我建议您有 2 个 conf 文件。
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:
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 建立了一个完整的服务器基础设施,现在它已经完美地部署在我们的服务器上了。简而言之,它的工作原理如下:
- 首先是nginx代理容器
- 带有 apache2-nginx-php5.6 的容器,用于演示应用程序
- 带有 apache2-nginx-php7.0 的容器,用于演示应用程序
- 用于生产应用程序的带有 apache2-nginx-php5.6 的容器
- 用于生产应用程序的带有 apache2-nginx-php7.0 的容器
- 带有用于演示的 maria 数据库的容器
- 用于生产的带有 maria db 的容器
带有 phpmyadmin 的容器以访问两个数据库服务
任何请求到nginx代理。
- 它匹配一些虚拟主机并被代理到内部有 apache2 和 nginx 的 4 个容器之一。
还有很多很酷的东西,比如 cron 配置为在检测到文件更改、监督服务、https 支持等时自动重新加载 apache2 和 nginx。
我打算将其进一步开发为一个开源项目,有兴趣的人请告诉我。