nginx JavaScript在简单的React应用程序中不起作用

h5qlskok  于 2023-08-03  发布在  Nginx
关注(0)|答案(1)|浏览(212)

我基于https://github.com/docker/awesome-compose/tree/master/react-nginx的一个简单的React应用程序,但我做了一些修改,现在网站目前正在工作,除了React徽标没有旋转,当我检查网站时,我看到“您需要启用JavaScript才能运行此应用程序”。文件https://github.com/docker/awesome-compose/blob/master/react-nginx/public/index.html负责此标记。我的配置和https://github.com/docker/awesome-compose/tree/master/react-nginx之间的主要区别是我使用了非特权的nginx镜像。
此外,当我进入容器并执行ls -la /usr/share/nginx/html时,我会看到下面的输出:

drwxr-xr-x 1 root root 4096 Jul 26 18:29 .
drwxr-xr-x 1 root root 4096 Jul 24 00:08 ..
-rw-r--r-- 1 root root  605 Jul 26 18:29 asset-manifest.json
-rw-r--r-- 1 root root 3870 Jul 26 18:29 favicon.ico
-rw-r--r-- 1 root root  644 Jul 26 18:29 index.html
-rw-r--r-- 1 root root 5347 Jul 26 18:29 logo192.png
-rw-r--r-- 1 root root 9664 Jul 26 18:29 logo512.png
-rw-r--r-- 1 root root  492 Jul 26 18:29 manifest.json
-rw-r--r-- 1 root root   67 Jul 26 18:29 robots.txt
drwxr-xr-x 5 root root 4096 Jul 26 18:29 static

字符串
nginx.conf:

pid /tmp/nginx.pid;

events {}

http {
    include /etc/nginx/mime.types;
    server {
        listen 8080 ssl;
        ssl_certificate /etc/nginx/tls/tls.crt;
        ssl_certificate_key /etc/nginx/tls/tls.key;

        location / {
            root /usr/share/nginx/html;
            index index.html index.htm;
            try_files $uri /index.html =404;
        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {
          root   /usr/share/nginx/html;
        }
    }
}


Dockerfile:

# syntax=docker/dockerfile:1.4

# 1. For build React app
FROM node:20.2.0-bullseye-slim AS development

# Set working directory
WORKDIR /app

# Copy package.json and package-lock.json to container
COPY package.json /app/package.json
COPY package-lock.json /app/package-lock.json

# Same as npm install
RUN npm ci && npm cache clean --force

COPY . /app

ENV CI=true
ENV PORT=3000

CMD [ "npm", "start" ]

FROM development AS build

RUN npm run build

FROM development as dev-envs

ENV PATH /app/node_modules/.bin:$PATH
ENV NODE_ENV=development

RUN apt-get update && apt-get install -y --no-install-recommends git

RUN useradd -s /bin/bash -m vscode && \
groupadd docker && \
usermod -aG docker vscode

# Install Docker tools (cli, buildx, compose)
COPY --from=gloursdocker/docker / /

RUN npm install && npm cache clean --force
RUN npm install -g nodemon

CMD [ "nodemon", "--inspect=0.0.0.0:9229"]

## Nginx unprivileged debian image
FROM nginxinc/nginx-unprivileged:1.25

## Switch to root user for setup
USER root

## Update apk and add curl
RUN apt-get update; \
    apt-get install -y curl; \
    apt-get install -y npm;

# Copy config nginx
COPY --from=build /app/.nginx/nginx.conf /etc/nginx/nginx.conf

# Copy mime.types from nginx image
COPY --from=nginx:alpine /etc/nginx/mime.types /etc/nginx/mime.types

WORKDIR /usr/share/nginx/html

# Remove default nginx static assets
RUN rm -rf ./*

# Copy static assets from builder stage
COPY --from=build /app/build .

# Copy the /app dir from builder stage in order to be able to do the unit tests
COPY --from=build /app /test-app

## Expose port 8080
EXPOSE 8080

## Switch to non-root user
USER nginx

## Healthchecks
# TODO Later, when you move from the self-signed certificates delete "-k" flag
HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \
    CMD curl -k -f https://localhost:8080 || exit 1


Web源代码与https://github.com/docker/awesome-compose/tree/master/react-nginx中的相同。

qq24tv8q

qq24tv8q1#

根据所提供的信息和配置,您的React应用似乎没有按预期运行,因为提供静态资产和Nginx配置可能存在问题。
“您需要启用JavaScript才能运行此应用程序。”消息:当React应用程序无法在浏览器中执行JavaScript时,通常会显示此消息。由于您提到浏览器中启用了JavaScript,因此问题可能与静态文件的提供方式有关。
Nginx配置:查看提供的nginx.conf文件,似乎没问题。它为/usr/share/nginx/html目录中的静态文件提供服务,index.html应该为任何不匹配的路由提供服务,这对于单页面React应用程序是正确的。
容器中的静态文件:/usr/share/nginx/html目录的列表显示了React应用运行所需的文件,包括index.html、JavaScript包和图像。因此,看起来构建工件被正确地复制到了Nginx容器中。
React徽标未旋转:旋转的React徽标通常表示index.html文件中缺少或错误引用了某些CSS或JavaScript文件。既然你提到你已经做了修改,那么问题可能就出在那里。
故障排除步骤:
检查index.html文件:确保/usr/share/nginx/html目录中的index.html文件正确引用了在React构建过程中生成的JavaScript和CSS文件。查找JavaScript包的标记和CSS文件的标记。
检查浏览器控制台:在浏览器中打开您的网站,然后检查浏览器控制台是否有任何错误。如果加载资源或执行JavaScript时出现任何问题,则会在控制台中显示这些问题。
检查Nginx日志:进入Nginx容器并检查日志,以查看是否存在任何有助于确定问题的错误或警告。
验证构建过程:确保在Docker构建过程中正确构建React应用程序。您可以通过在开发模式(npm start)下运行容器并验证旋转的React徽标是否按预期工作来实现这一点。
验证nginx配置:您提到您正在使用非特权Nginx映像。检查无权限的Nginx用户是否具有相应的读取权限,可以从/usr/share/nginx/html目录中读取文件。

相关问题