我开始用nginx反向代理测试新的Laravel compose环境,这样我就可以在我的本地机器上开发时从一个真正的tld访问我的网站。
我的设置是: 20,安装了nginx和docker。
在主机上启用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/ host文件中还有127.0.0.1 mysite.xyz
我的船坞-写作:
# 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时,站点正在加载。
我遇到的问题是,在通过访问注册页( http://localhost:8002/register )可以从主机上看到的注册页上,表单操作是:
生成上述url的代码是<form method="POST" action="{{ route('register') }}">。
这是一个问题,因为我没有从localhost:XXXX访问站点,而是从mysite.xyz访问,后者通过nginx反向代理并最终指向http://localhost:8002/register **。
我查过的是:
在我的Laravel .env文件中,APP_URL是mysite.xyz,如果我将ssh放入船帆容器,启动工匠修补程序,然后运行route('register'),它输出的https://mysite.xyz/非常清楚,容器内的laravel应用程序似乎行为正确。
有趣的是,当它呈现html响应时,它将注册路由呈现为http://localhost:8002/register。
我试着在整个项目中搜索localhost:8002,我可以在/storage/framework/sessions/asdofhsdfasf8as7dgf8as7ogdf8asgd7中找到它:{s:3:"url";s:27:"http://localhost:8002/login";}“
所以会议似乎认为它是本地主机:8002,但是tinker认为它是mysite.xyz
我也是个码头工人,谁知道我错过了什么。我迷路了:)
发布于 2021-05-15 01:57:06
“问题”在于nginx配置,而不是代码:
proxy_pass http://localhost:8002;Laravel在CLI (控制台)中使用APP_URL,或者在代码中使用config('app.url')或env('APP_URL')。对于所有其他操作(例如通过路由助手构建URL ),Laravel从请求中获取URL:
url助手可用于为应用程序生成任意url。生成的URL将自动使用该方案(HTTP或HTTPS),并从应用程序正在处理的当前请求托管。
您需要做的是在nginx配置中传递正确的URL和端口,方法是添加:
proxy_pass http://localhost:8002;
proxy_set_header Host $host;有关该主题的其他信息,您可能希望查看本文:建立Nginx反向代理
https://stackoverflow.com/questions/65349605
复制相似问题