首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于码头部署的Nginx配置

用于码头部署的Nginx配置
EN

Server Fault用户
提问于 2019-06-07 08:40:47
回答 1查看 872关注 0票数 0

我已经完成了一个部署在Windows服务器上的应用程序的重新部署,在Windows服务器上,python后端、post话母db和前端都在同一个服务器上。我已经要求将其分离,并将其放在linux dockers上。原来做的顾问已经不能用了,所以我不太清楚什么是关键的,什么不是。

在我自己的ubuntu电脑上,我使用-网络=主机。我已经设置了后置和python后端,服务生正在收听localhost:7000,现在我需要做nginx对接。

与nginx配置文件相关的windows服务器的部署说明如下:

在远程机器上编辑配置后,可以用psexec -w C:\tools\nginx -s nginx -s reload.重新加载配置(nginx保存在C:\tools\nginx中)

代码语言:javascript
复制
server_names_hash_bucket_size 64;

proxy_buffering on;
proxy_buffers 24 4k;
proxy_busy_buffers_size 32k;

proxy_set_header Host $host;
proxy_http_version 1.1;

gzip on;
gzip_proxied any;
gzip_min_length 1000;
gzip_types
    text/css
    text/plain
    image/.*
    application/javascript
    application/json;

# Test setup
server {
    listen 80;
    server_name test.xxx.yyy.com localhost 127.0.0.1;
    root C:/www/html-dev;

    error_log C:/www/error-dev.log debug;

    index index.html;
    try_files $uri $uri/ /index.html;

    charset utf-8;

    location /api/ {
        proxy_pass http://localhost:7000/;
    }

    location /nginx-status {
        stub_status;
    }
}

看到这个nginx设置之后,我当前的dockerfile如下所示:

代码语言:javascript
复制
FROM nginx
COPY html /usr/share/nginx/html
COPY nginx.conf /etc/nginx/nginx.conf

对于这个设置来说,是否有一个可修复的nginx.conf的手术,或者我错过了什么?一般来说,几乎任何建议都会受到赞赏(我是个菜鸟)。

EN

回答 1

Server Fault用户

发布于 2019-06-07 09:31:54

根据发布的nginx配置,您主要做三件事:

  • 收听test.xxx.yyy.com:80
  • 直接服务C:/www/html-dev文件(我假设这是静态内容,如img/css/js)
  • 期待/api/,这只是被代理到http://localhost:7000 (应该是应用服务器)

您可以使用此配置,但这需要在Docker端进行一些配置。nginx容器需要访问静态争用,它位于旧Win服务器上的C:/www/html-dev中。可以将其包含在图像中(Dockerfile) )

代码语言:javascript
复制
COPY html-dev /usr/share/nginx/html

或在运行时将其挂载为音量,如码头工中所示

代码语言:javascript
复制
version: "2.4"
services:
  web:
    image: nginx:1.16-alpine
    volumes: 
      - ./html-dev:/usr/share/nginx/html
    # Access nginx on port 80 of the host (if already taken, change it)
      - 80:80

卷方法更快,特别是在开发过程中,文件夹中包含了大量文件。

总的来说,我建议您在这里使用码头工。它使多个容器的处理变得容易。这是您在这里需要的,因为Docker方法需要每个应用程序一个容器。这样,您就不会将Python应用程序放在nginx容器中。

因为nginx不能直接与Python后端对话,所以您需要WSGI。没有它,这只会使用Pythons开发服务器。但根据文档,这还没有准备好生产,不应该在开发之外使用。您的配置看起来就像后端是这样的dev服务器(或者在它们之间有一些没有显示的东西)。

我建议使用WSGI正确地解决这个问题,例如,您可以使用[uWSGI](http://flask.pocoo.org/docs/1.0/deploying/uwsgi/)来解决这个问题。在这里找到文档完整的Docker映像:https://github.com/tiangolo/uwsgi-nginx-flask-docker

简而言之,这将导致另一个容器,您将上游您的nginx。需要用这个服务名称替换localhost。例如,如果服务在uwsgi中被称为docker-compose.yml,那么将uwsgi与相应的主机一起使用,而不是本地主机。这是可能的,因为docker-复合本身在默认情况下在其容器之间创建了一个虚拟网络。

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

https://serverfault.com/questions/970513

复制
相关文章

相似问题

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