首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel (码头),nginx反向代理- Html呈现localhost:8002而不是site.xyz

Laravel (码头),nginx反向代理- Html呈现localhost:8002而不是site.xyz
EN

Stack Overflow用户
提问于 2020-12-17 23:03:13
回答 1查看 5.4K关注 0票数 5

我开始用nginx反向代理测试新的Laravel compose环境,这样我就可以在我的本地机器上开发时从一个真正的tld访问我的网站。

我的设置是: 20,安装了nginx和docker。

在主机上启用Nginx站点:

代码语言:javascript
复制
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

我的船坞-写作:

代码语言:javascript
复制
# 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

我也是个码头工人,谁知道我错过了什么。我迷路了:)

EN

回答 1

Stack Overflow用户

发布于 2021-05-15 01:57:06

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

代码语言:javascript
复制
proxy_pass http://localhost:8002;

Laravel在CLI (控制台)中使用APP_URL,或者在代码中使用config('app.url')env('APP_URL')。对于所有其他操作(例如通过路由助手构建URL ),Laravel从请求中获取URL:

URL生成,Laravel 8.x文档

url助手可用于为应用程序生成任意url。生成的URL将自动使用该方案(HTTP或HTTPS),并从应用程序正在处理的当前请求托管

您需要做的是在nginx配置中传递正确的URL和端口,方法是添加:

代码语言:javascript
复制
proxy_pass http://localhost:8002;
proxy_set_header Host $host;

有关该主题的其他信息,您可能希望查看本文:建立Nginx反向代理

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65349605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档