我正在嘗試使用 nginx、php、mysql、phpmyadmin 設定 docker 環境,我想知道如何配置它以便我可以通過另一個主機名訪問 phpmyadmin。
例如訪問我想使用 site.com 的站點和訪問 phpmyadmin 我想使用 database.site.com
我的 /etc/hosts 是這樣配置的
127.0.0.1 localhost example.com database.example.com
我的碼頭作曲家看起來像這樣
version: '3'
services:
web:
image: nginx:alpine
container_name: nginx
volumes:
- "./etc/nginx/default.conf:/etc/nginx/conf.d/default.conf"
- "./etc/ssl:/etc/ssl"
- "./repo:/var/www/html"
- "./etc/nginx/default.template.conf:/etc/nginx/conf.d/default.template"
ports:
- "80:80"
- "443:443"
environment:
- NGINX_HOST=site.com
networks:
- my-network
command: /bin/sh -c "envsubst '$site.com' < /etc/nginx/conf.d/default.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
restart: always
depends_on:
- php
- mysql
php:
image: bitnami/php-fpm:8.0.10
container_name: php
restart: always
volumes:
- "./etc/php/php.ini:/usr/local/etc/php/conf.d/php.ini"
- "./repo:/var/www/html"
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: phpmyadmin
ports:
- "8080:80"
environment:
- PMA_ARBITRARY=1
- PMA_HOST=mysql
networks:
- my-network
restart: always
depends_on:
- mysql
mysql:
image: mysql:8.0.27
container_name: mysql
restart: always
env_file:
- ".env"
environment:
- MYSQL_DATABASE=database
- MYSQL_ROOT_PASSWORD=root
- MYSQL_USER=admin
- MYSQL_PASSWORD=admin
ports:
- "8989:3306"
volumes:
- "./data/db/mysql:/var/lib/mysql"
networks:
my-network: null
我的 nginx conf 看起來像這樣
server {
listen 80;
server_name example.com;
root /var/www/html/public;
...
location ~ \.php$ {
fastcgi_split_path_info ^(. \.php)(/. )$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME$document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
fastcgi_pass unix:/run/php/php8.0-fpm.sock;
}
...
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com;
root /var/www/html/public;
...
location / {
if ($args ~* _escaped_fragment_) {
# Pass to phantom proxy
proxy_pass http://127.0.0.1:443;
}
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Client-Verify SUCCESS;
proxy_set_header X-SSL-Subject $ssl_client_s_dn;
proxy_set_header X-SSL-Issuer $ssl_client_i_dn;
proxy_set_header HTTPS on;
proxy_buffers 16 4k;
proxy_buffer_size 2k;
proxy_pass http://127.0.0.1:433;
}
...
}
server {
listen 80;
server_name database.example.com;
location / {
proxy_pass http://phpmyadmin:80;
}
}
uj5u.com熱心網友回復:
出于這個原因,請勿使用 site.com 作為示例。我已將所有內容更改為 example.com
- 更改埠系結,以便 nginx 系結來自主機
443:443和80:80(而不是9080:80和3000:443)的正確埠。否則,您的 Web 請求將需要包含埠,例如https://example.com:3000. - 將您的容器與公共網路連接在一起(請參閱此處)。
- 更新您的 nginx 配置以將流量代理到您的 phpmyadmin 容器。它應該是這樣的:
...
server {
listen 80;
server_name database.example.com;
location / {
proxy_pass http://phpmyadmin;
}
}
...
這應該導致以下結果:
- 請求
http://database.example.com決議為127.0.0.1。 - Web 瀏覽器在埠上發出請求
80。 127.0.0.1:80轉發到80您的 nginx 容器中的埠。- nginx 將流量代理到
http://phpmyadmin,它能夠通過 docker 網路決議和連接。
https://database.example.com在那之后,您應該能夠相當輕松地訪問和運行該網站。我相信https://example.com修復埠系結后應該可以正常作業。要修復http://example.com端點,請將您的偵聽器從 更改127.0.0.1:9080為 僅80在 nginx 配置中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/361827.html
