我开始使用 nginx 反向代理测试新的 Laravel Sail docker-compose 环境,这样我就可以在本地机器上开发时从真实的 tld 访问我的网站。
我的设置是:操作系统 - 安装了 nginx 和 docker 的 Ubuntu Desktop 20。
在主机上启用 Nginx 站点:
server {
server_name mysite.xyz;
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /etc/ssl/certs/mysite.xyz.crt;
ssl_certificate_key /etc/ssl/private/mysite.xyz.key;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
location / {
proxy_pass http://localhost:8002;
}
}
我的主机 /etc/hosts 文件中还有127.0.0.1 mysite.xyz
还有我的 docker-compose:
# For more information: https://laravel.com/docs/sail
version: '3'
services:
laravel.test:
build:
context: ./vendor/laravel/sail/runtimes/8.0
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: sail-8.0/app
ports:
- '8002:80'
environment:
WWWUSER: '${WWWUSER}'
LARAVEL_SAIL: 1
volumes:
- '.:/var/www/html'
networks:
- sail
depends_on:
- mysql
- redis
image: 'mysql:8.0'
ports:
- '${FORWARD_DB_PORT:-3306}:3306'
environment:
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
MYSQL_DATABASE: '${DB_DATABASE}'
MYSQL_USER: '${DB_USERNAME}'
MYSQL_PASSWORD: '${DB_PASSWORD}'
MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
volumes:
- 'sailmysql:/var/lib/mysql'
networks:
- sail
redis:
image: 'redis:alpine'
ports:
- '${FORWARD_REDIS_PORT:-6379}:6379'
volumes:
- 'sailredis:/data'
networks:
- sail
networks:
sail:
driver: bridge
volumes:
sailmysql:
driver: local
sailredis:
driver: local
当我从主机访问 mysite.xyz 时,网站加载正常。
我遇到的问题是,在我可以通过访问注册页面( https://mysite.xyz/register )从我的主机上看到的注册页面上,表单操作是:http://localhost:8002/register
生成上述 url 的代码是<form method="POST" action="{{ route('register') }}">
这是一个问题,因为我没有从 localhost:XXXX 访问该站点,而是从 mysite.xyz 访问该站点,该站点通过 nginx 反向代理并最终指向 http://localhost:8002/register **
我检查了什么:
在我的 Laravel .env 文件中,如果我 ssh 进入 Sai 容器并启动 artisan tinker 然后运行route('register')
它,那么 APP_URL 是 mysite.xyz 输出https://mysite.xyz/ 如此清晰,容器内的 laravel 应用程序似乎是行为正确。
有趣的是,当它渲染 html 响应时,它会将注册路由渲染为http://localhost:8002/register
我尝试在整个项目中搜索 localhost:8002,我可以在 /storage/framework/sessions/asdofhsdfasf8as7dgf8as7ogdf8asgd7 中找到它,那段文字显示:{s:3:"url";s:27:"http://localhost: 8002/登录";}
所以似乎会话认为它是 localhost:8002 但修补匠认为它是 mysite.xyz
我也是一个码头菜鸟,所以谁知道我错过了什么。我迷路了 :)