Mauticサービスを実行しようとしています(https://hub.docker.com/r/mautic/mautic) を Docker の NGINX リバース プロキシの背後で実行していますが、何が間違っているのかわかりません。
私の設定を紹介するためのちょっとした前置き:
Mautic はポート 80 でリッスンしており、NGINX コンテナーもすでにポート 80 でリッスンしているので、Mautic イメージ内の次のファイルでポート 80 を 8081 に変更しました。
/etc/apache2/ports.conf
/etc/apache2/sites-available/000-default.conf
ポート 80 でリバース プロキシとして動作する NGINX コンテナがあります。NGINX コンテナには次のものがあります/etc/nginx/conf.d/default.conf
:
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
proxy_pass http://site-client:4200;
}
location /api/ {
proxy_pass http://site-api:8055/;
}
location /mautic/ {
proxy_pass http://mautic:8081/;
}
}
docker-compose.yml ファイルで Mautic 用のポート 8081 を公開しています。
さて、問題となる部分は次のとおりです。
- http://localhost:8081 にアクセスすると、ブラウザの URL が http://localhost:8081/s/dashboard に変わり、Mautic は正常に動作します。
- ただし、http://localhost/mautic/ にアクセスすると、ブラウザの URL が http://localhost/s/dashboard に変わり、サービスに移動します
site-client
。何らかの理由で、URL の /mautic/ の部分がここで失われています。 - したがって、http://localhost/mautic/s/dashboard にアクセスすると、URL は同じままで、Mautic は ERR_ABORTED 404 エラーを大量に表示してロードされます (下の Chrome 開発者コンソールの画像を参照)。これらのファイルのリクエスト ヘッダーを見ると、リクエスト URL に /mautic/ 部分がまだ含まれていないことがわかります (ブラウザーの URL に手動で含めたにもかかわらず)。そのため、リクエスト ヘッダー URL が間違っているためにこれらのファイルが見つからないのは当然です。しかし、なぜ間違っているのでしょうか?
どのように修正しようとしたか:
私のサービス(Node.js ベースのヘッドレス CMS (Directus))でも同じ問題が発生しましたsite-api
が、設定でパブリック URL を http://localhost/api に設定することで解決しました。http://localhost/api/ にアクセスすると、このサービスは正常に動作します。そこで、Mautic の設定でも同じことを試し、パブリック URL を http://localhost:8081 から http://localhost/mautic に設定しました。これで、http://localhost/mautic/ にアクセスすると、ブラウザーの URL は正しく http://localhost/mautic/s/dashboard に設定されていますが、下の画像に示すように、同じ結果になります。
これは、Mautic と NGINX に関する docker-compose.yml です。
reverse-proxy:
container_name: nginx
build: ./tools/nginx
depends_on:
- site-api
- site-client
- mautic
networks:
- site-api-network
ports:
- 80:80
restart: always
mautic:
image: mautic/mautic:v4
build: ./tools/mautic
container_name: mautic
links:
- mauticdb:mysql
depends_on:
- mauticdb
ports:
- 8081:8081
volumes:
- mautic_data:/var/www/html
environment:
- MAUTIC_DB_HOST=mauticdb
- MYSQL_PORT_3306_TCP=3306
- MAUTIC_DB_USER=root
- MAUTIC_DB_PASSWORD=${MAUTIC_DB_PASSWORD}
- MAUTIC_DB_NAME=${MAUTIC_DB_NAME}
- MAUTIC_RUN_CRON_JOBS=true
- MAUTIC_INSTALL_FORCE=true
- MAUTIC_ADMIN_EMAIL=${MAUTIC_ADMIN_EMAIL}
- MAUTIC_ADMIN_PASSWORD=${MAUTIC_ADMIN_PASSWORD}
- MAUTIC_ADMIN_USERNAME=${MAUTIC_ADMIN_USERNAME}
- MAUTIC_ADMIN_FIRSTNAME=${MAUTIC_ADMIN_FIRSTNAME}
- MAUTIC_ADMIN_LASTNAME=${MAUTIC_ADMIN_LASTNAME}
- MAUTIC_TRUSTED_PROXIES=["0.0.0.0/0"]
networks:
- site-api-network
networks:
site-api-network:
driver: bridge
volumes:
mautic_db_data:
driver: local
mautic_data:
driver: local
これはreverse-proxy
Dockerfile です:
FROM nginx:alpine
RUN rm /etc/nginx/conf.d/*
COPY ./default.conf /etc/nginx/conf.d/
EXPOSE 80
CMD [ "nginx", "-g", "daemon off;" ]
これはmautic
Dockerfile です:
FROM mautic/mautic:v4
RUN rm /etc/apache2/ports.conf
RUN rm /etc/apache2/sites-available/000-default.conf
COPY ./ports.conf /etc/apache2/
COPY ./000-default.conf /etc/apache2/sites-available
EXPOSE 8081
Mautic 画像ports.conf
ファイル
Listen 8081
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
Mautic 画像000-default.conf
ファイル
<VirtualHost *:8081>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
答え1
これは、NGINX ではなく、バックエンド サービス Mautic の問題であると考えています。何が起こっているのか、また、いくつかの解決策は、ここから得ることができます。https://serverfault.com/a/797006
私は、ドメインのサブパスではなく、サブドメインをサービスにポイントするソリューションを選択しました。
したがって、次のようにアクセスするのではなくexample.com/mautic/
、
location /mautic/ {
proxy_pass http://mautic:8081/;
}
server_name
私はset toで別の server ブロックを作成しmautic.example.com
、その中に location ブロックを作成します。
location / {
proxy_pass http://mautic:8081/;
}