如何访问Docker和Nginx部署的www版Next.js静态导出站点?

hl0ma9xz  于 2023-06-21  发布在  Nginx
关注(0)|答案(2)|浏览(115)

我有一个Next.js静态导出site,我部署了Docker和Nginx。我正在使用Cloudflare进行DNS和SSL。我可以使用https://mansourlotfi.ir访问我的网站,但当我尝试访问https://www.mansourlotfi.ir时,我得到一个“404页面未找到”。
Dockerfile

FROM hub.hamdocker.ir/nginx:1.22.0
COPY ./out ./project
RUN rm ../etc/nginx/conf.d/default.conf
COPY ./nginx-configs ../etc/nginx/conf.d

nginx-configs文件夹中的settings.conf

server
{
    listen 80;
    server_name www.mansourlotfi.ir;
    return 301 https://mansourlotfi.ir$request_uri;
}

server
{
    listen 80;
    server_name c13.hamravesh.hamserver.ir;
    return 301 https://mansourlotfi.ir$request_uri;
}

server
{
    listen 80;
    server_name mansourlotfi.ir;
    root /project;

    location /
    {
        index index.html;
        try_files $uri $uri/ /index.html =404;
    }

    error_page 404 /404.html;
    location = /404.html
    {
        internal;
    }

}

cloudflare DNS配置

注意:我已经在Cloudflare中添加了example.com和www.example.com的CNAME记录,指向我的服务器的相同IP地址。
另外,当我访问一个不存在的路由(如example.com/asd)时,它不会显示Next.js 404页面,而是显示主页。我已经阅读了社区中所有与此问题相关的主题,但不幸的是,我没有成功。谢谢你的帮助

txu3uszq

txu3uszq1#

您似乎没有正确包含服务器块
您可以在此处更改设置。conf

server {
        listen 80;
        server_name www.mansourlotfi.ir c13.hamravesh.hamserver.ir;
        return 301 https://mansourlotfi.ir$request_uri;
    }
    
    server {
        listen 80;
        server_name mansourlotfi.ir;
        root /project;
    
        location / {
            index index.html;
            try_files $uri $uri/ /index.html =404;
        }
    
        error_page 404 /404.html;
        location = /404.html {
            internal;
        }
    }

请确保在nginx-configs文件夹中设置.conf文件,并重新构建和重新部署Docker容器以应用更改。

m3eecexj

m3eecexj2#

Dockerfile、Cloudflare和nginx中www版本的所有设置都是正确的。还有一样东西不见了:我不得不将我的域名www添加到运行我的容器化应用程序的主机设置中。

这解决了我的问题,现在我可以看到我的网站与www.

相关问题