如何使用proxy_pass创建一个使用nginx的dockefile,以便在一个容器中为全栈应用程序提供服务?我的目标是使用云运行

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

我的dockerfile看起来有点像这样:--简化

FROM ubuntu:22.10

# Create my_user ...

# Copy Nginx configuration files
COPY ./nginx.conf /etc/nginx/nginx.conf
COPY ./proxy.conf /etc/nginx/conf.d/proxy.conf

WORKDIR /app
RUN npm install \
    && npm run build

WORKDIR /app/frontend
RUN npm install \
    && npm run build

RUN sudo cp -a ./dist/. /var/www/html

WORKDIR /app

CMD ["sh", "-c", "nginx -g 'daemon off;' & npm run start:prod"]

字符串
这是我的代理。conf

upstream backend {
    server localhost:3000;
}

server {
    listen 8080;
    server_name _;

    root /var/www/html;
    index index.html;

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

    location ~ \.(css|js)$ {
        add_header Content-Type text/plain;
        try_files $uri =404;
    }

    location /api {
        proxy_pass http://backend/api;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}


这是我的nginx.conf

user my_user;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 768;
    # Other event configurations if needed
}

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    sendfile on;

    include /etc/nginx/conf.d/*.conf;
}


在本地,这就像一个魅力,但一旦部署在云中运行,并试图访问/API下的路径,如my_domain.bla/api/here/we/are我从nginx得到一个日志说:
第一个月
Nginx正在侦听端口8080,而我的后端应用程序正在端口3000上运行(我看到来自容器的清晰日志,确认应用程序运行正常并侦听正确的端口)
我希望proxy_pass在云上运行时能像在本地运行时一样工作。有谁知道云计算和本地化的区别吗?我的第一个想法是nginx可能试图将请求路由到主机,而不是内部的容器。后端端口没有暴露,所以它会解释连接被拒绝,但我如何解决这个问题?

bbuxkriu

bbuxkriu1#

您的Nginx应用程序需要的CPU时间比您当前的Cloud Run配置提供的更多。容器生命周期中的guide将显示如何分配CPU时间。
为Cloud Run示例启用CPU always allocated
当CPU总是被分配时,存在额外的成本。查看此document以了解更多详细信息。

相关问题