gpt4 book ai didi

Laravel Sail (docker), nginx 反向代理 - Html 呈现 localhost :8002 instead of site. xyz

转载 作者:行者123 更新时间:2023-12-03 17:23:00 24 4
gpt4 key购买 nike

我开始使用 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;
}

}
我也有 127.0.0.1 mysite.xyz 在我的主机/etc/hosts 文件中
还有我的 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/注册
生成上述 url 的代码是 <form method="POST" action="{{ route('register') }}">这是一个问题,因为我没有从 localhost:XXXX 访问该站点,而是从 mysite.xyz 访问该站点,该站点通过 nginx 反向代理并最终指向 http://localhost:8002/register
**
我检查了什么:
在我的 Laravel .env 文件中,APP_URL 是 mysite.xyz
如果我通过 ssh 进入 Sai 容器并启动 artisan tinker 然后运行 ​​ route('register')它输出 https://mysite.xyz/ 很明显,容器内的 laravel 应用程序似乎表现正确。
有趣的是,当它渲染 html 响应时,它会将注册路由渲染为 http://localhost:8002/注册
我尝试在整个项目中搜索 localhost:8002,我可以在/storage/framework/sessions/asdofhsdfasf8as7dgf8as7ogdf8asgd7 中找到它
那段文字说: {s:3:"url";s:27:"http://localhost:8002/login";}
所以似乎 session 认为它是 localhost:8002 但修补匠认为它是 mysite.xyz
我也是一个 docker 菜鸟,所以谁知道我错过了什么。我迷路了 :)

最佳答案

“问题”在于您的 nginx 配置,而不是您的代码:

proxy_pass http://localhost:8002;
Laravel 在 CLI(控制台)中使用 APP_URL 或在您使用 config('app.url') 时使用或 env('APP_URL')在你的代码中。对于所有其他操作(例如通过路由助手构建 URL),Laravel 从请求中获取 URL:
URL Generation, Laravel 8.x Docs

The url helper may be used to generate arbitrary URLs for your application. The generated URL will automatically use the scheme (HTTP or HTTPS) and host from the current request being handled by the application.


您需要做的是在您的 nginx 配置中传递正确的 URL 和端口,方法是添加:
proxy_pass http://localhost:8002;
proxy_set_header Host $host;
有关该主题的更多信息,您可能需要查看这篇文章: Setting up an Nginx Reverse Proxy

关于Laravel Sail (docker), nginx 反向代理 - Html 呈现 localhost :8002 instead of site. xyz,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65349605/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com