我试图使用nginx对一个经典的NodeJS(Express,TS)+Angular应用程序进行Dockerize,但我很难通过nginx正确绑定我的api。
事实上,nginx的目标似乎是我的本地主机:80...
...而我希望它以我的localhost:3000
为目标。当我在localhost
之后添加:3000
时手动ping该url,它就可以工作了。
FROM node:15.14-alpine AS build
RUN mkdir -p /build/tmp
WORKDIR /build/tmp
COPY . .
RUN npm ci
CMD ["npm", "run", "start"]
### STAGE 1: Build ###
FROM node:15.14-alpine AS build
WORKDIR /usr/src/app
COPY package.json package-lock.json ./
RUN npm install
COPY . .
RUN npm run build
### STAGE 2: Run ###
FROM nginx:1.17.1-alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=build /usr/src/app/dist/front /usr/share/nginx/html
version: '3.4'
services:
mymusicads-front:
container_name: mymusicads-front
build:
context: ./front
dockerfile: Dockerfile
ports:
- 80:80
restart: on-failure
depends_on:
- mymusicads-api
networks:
- front-back
mymusicads-api:
container_name: mymusicads-api
build:
context: ./api
dockerfile: Dockerfile
ports:
- 3000:3000
networks:
- front-back
networks:
front-back:
driver: bridge
events{}
http {
include /etc/nginx/mime.types;
upstream api {
server 127.0.0.1:3000;
}
server {
listen 80;
server_name front;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
server {
listen 80;
server_name api;
location /api/ {
proxy_pass http://localhost:3000/;
proxy_redirect off;
}
}
}
当您在配置中使用多个server
块时,nginx将根据HTTPhost
标头值选择处理请求的服务器块。如果它与任何指定的服务器名称都不匹配(或者根本不存在host
标头),则将使用默认的服务器块。可以使用Listen
指令的default_server
标志显式指定默认服务器块。如果不显式指定,将使用侦听特定端口的第一个服务器块。有关更多细节,请参见nginx如何处理请求官方文档页面或本答案。
请尝试此配置:
events {}
http {
include /etc/nginx/mime.types;
server {
listen 80;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://mymusicads-api:3000/;
proxy_redirect off;
}
}
}
您不需要向外部世界公开Node.js端口3000,只有mymusicads-front
容器才可以访问该端口。根据docker-compose端口与expose SO thread之间的区别,您的dockercompose.yml
文件应该类似于
version: '3.4'
services:
mymusicads-front:
container_name: mymusicads-front
build:
context: ./front
dockerfile: Dockerfile
ports:
- 80:80
restart: on-failure
depends_on:
- mymusicads-api
networks:
- front-back
mymusicads-api:
container_name: mymusicads-api
build:
context: ./api
dockerfile: Dockerfile
expose:
- 3000
networks:
- front-back
networks:
front-back:
driver: bridge
问题内容: 因此,我查看了有关该主题的所有教程,但没有任何效果。我在Windows 10专业版上有一个JENKINS实例,在Nginx上有一个centos。我想将NGINX用作Jenkins的反向代理,以具有https并使其可从Internet访问。我当前的配置是: (我替换了真实的URL和IP。)但这给了我502错误的网关。出现以下错误:连接到上游时,connect()到192.XXX:8080
因为某些需求,需要把前后端部署在同一个端口,配置nginx反向代理,如下 在运行时已经将80端口映射到8848,并且能正确访问前端的页面。我预期是访问http://localhost:8848/zssrapi/xxx时能转到后端实际端口http://localhost:8123/zssrapi/xxx。但是尝试之后报错404,如图, 求助解决办法qaq
这让我快疯了。 我有一个简单的Python脚本,可以使用Google mail API对我的个人GMail进行邮件管理。 我似乎能让它工作的唯一方法是让它保持“测试”状态,并每七天刷新一次令牌。 在应用编程接口管理页面上,我试图让它成为内部的,但我得到了这个工具提示:“因为你不是谷歌工作区用户......” 除了我是谷歌工作空间的用户。我每月有8美元的谷歌工作空间个人订阅。 当然,人们也在做我正在
在我的 Spring Boot 应用程序中,我需要两种类型的身份验证机制。对于文件上传终结点,它需要基于 api 密钥的身份验证,对于其他终结点,它需要基于用户名密码的身份验证。以前,只有基于用户名密码的身份验证,如下所示。 为了支持下面的基于api密钥的身份验证,我修改了这段代码。通过以下线程并相应地实现。使用API密钥和密码保护Spring Boot API Spring Security:多
更新:不推荐使用GCM,请使用FCM 我正在按照Google Developers页面中的指南实现新的Google云消息 我已经成功地运行并测试了它。但我现在的问题是,我有不同的产品风格,有不同的applicationID/packageName和不同的Google Cloud Messaging Project ID。必须放在而不是flavors文件夹中。 有什么方法可以使配置针对多种口味不同吗
问题内容: 我编写了JAX-RS的附加内容,并将Java EE 6 API包含为Maven依赖项。 然后我有一个测试用例: 但我得到一个错误: 如果我将Jersey作为JAX-RS实现而不是Java EE API包含在内,那么一切都很好。 感谢BalusC的提示,我知道了我的猜测:Java EE 6只是一个没有方法主体的API: 来自java.net博客 您可以使用此jar编译代码,但是当然不能使