首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Nginx https发布坞-撰写

Nginx https发布坞-撰写
EN

Stack Overflow用户
提问于 2019-12-08 03:42:20
回答 1查看 375关注 0票数 1

让我的web应用程序正确地使用https启动是有问题的。当前,当尝试访问站点时,它看起来像这样,有一个404错误

我的docker-compose.yml文件如下:

代码语言:javascript
运行
复制
version: '3'
services:
nginx:
restart: always
image: nginx:latest
container_name: nginx
volumes:
  - ./nginx.conf:/home/comas/COMAS/COMAS-Docker/nginx.conf
  - ./ssl:/home/comas/COMAS/COMAS-Docker/certs/
ports:
  - "80:80"
  - "443:443"
  - "5000:5000"
  - "3000:3000"
networks:
  - ephemeris-public
depends_on:
  - api
  - ephemeris-web
db:
restart: always
image: mysql:latest
environment:
  MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASS}
  MYSQL_USER: ${MYSQL_USER_NAME}
  MYSQL_PASS: ${MYSQL_USER_PASS}
  MYSQL_DATABASE: ${MYSQL_DB_NAME}
volumes:
  - db-datavolume:/var/lib/mysql
ports:
  - "3306:3306"
networks:
  - api
api:
image: localhost:6969/comas-api:latest
expose:
  - "5000"
volumes:
  - ${API_LOCATION}:/app
depends_on:
  - db
networks:
  - api
  - ephemeris-public
  ephemeris-web:
  image: localhost:6969/ephemeris-ui:latest
  command: npm start
  expose:
  - "443"
environment:
  NODE_TLS_REJECT_UNAUTHORIZED: 0
  NODE_ENV: 'production'
  #    volumes:
  # - ${EPHEMERIS_UI_LOCATION}:/app
  networks:
  - ephemeris-public
  depends_on:
  - api
  portainer:
  image: portainer/portainer
  restart: always
  user: "${DOCKER_UID}:${DOCKER_GID}"
  networks:
  - ephemeris-public
  ports:
  - "9000:9000"
  - "8000:8000"
  volumes:
  - /var/run/docker.sock:/var/run/docker.sock
  - portainer_data:/portainer_data
  volumes:
  db-datavolume:
  portainer_data:
  networks:
  ephemeris-public:
  api:

我的nginx.conf文件如下:

代码语言:javascript
运行
复制
# Prints everything going wrong to standard error output
error_log stderr;

events {
    worker_connections  4096;  ## Default: 1024
}

http {
    # Prints everything nginx is doing to standard output
    access_log /dev/stdout;

    # Location of the API
    upstream docker-api {
        server api:5000;
    }

    # Location of the Ephemeris interface
    upstream docker-ephemeris-web {
        server ephemeris-web:443;
    }

    # Grants access to ephemeris over port 443 (HTTPS)
    server {
        listen 443;
        listen [::]:443;

        ssl on;
        ssl_certificate /home/comas/COMAS/nginx/bundle.crt;
        ssl_certificate_key /home/comas/COMAS/nginx/ephermis.key;

        root /var/www/html;
        server_name ephemeris.ecrl.organization.edu;

        location / {
            try_files $uri $uri/ =404;
        }
    }

    # Redirect to https(HTTPS)
    server {
        listen 80;
        listen [::]:80;

        server_name ephemeris.ecrl.organization.edu;
        return 301 https://ephemeris.ecrl.organization.edu;
    }

    # Grants access to ephemeris over port 3000, its default port
    server {
        listen 443;

        location / {
            proxy_pass https://docker-ephemeris-web;
        }
    }

    server {
        listen 5000;
        location / {
            # Aight if we're being honest I just slapped everything on here until it worked, I'll fix it up later
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-NginX-Proxy true;
            proxy_pass https://docker-api;
            proxy_ssl_session_reuse off;
            proxy_ssl_verify off;
            proxy_set_header Host $https_host;
            proxy_set_header X_FORWARDED_PROTO https;
            proxy_redirect off;
        }
    }
}

下面是我从portainer的nginx容器日志中获取的截图:

这是我第一次做任何与码头,码头写作,或nginx有关的事情,所以我只是不知道我在哪里出错。请让我知道,如果有任何信息没有列出在这篇文章将有助于找出一个解决方案。谢谢大家抽出时间。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-08 10:00:14

您已经开始使用这些技术的非常复杂的第一步。从更简单的开始,一步一步地增加复杂性,可能会更容易,更好的学习体验。首先从一个普通的nginx容器开始,然后更新您的nginx.conf并使https重定向工作。然后更新你的对接-撰写添加你的数据库并使它工作.等等,一步一步地添加API,这本身就是一个相当复杂的部分。从这样一个复杂的配置开始,作为您的第一步,您将--可以理解--不知道当它不工作时,需要查看的移动部件拼图中的哪些部分。

我猜你将面临一系列的问题,每个新的问题都暴露在你修复前一个问题的时候。

无论如何,从我能看到的第一个开始。您已经将nginx.conf映射到容器中:

代码语言:javascript
运行
复制
- ./nginx.conf:/home/comas/COMAS/COMAS-Docker/nginx.conf

但是nginx不会知道的。您正在使用的nginx Docker图像的文档 (参见“复杂配置”)是nginx服务器使用的nginx.conf/etc/nginx/nginx.conf上使用的。如果您希望nginx使用您的conf,则需要将其映射到以下位置:

代码语言:javascript
运行
复制
- ./nginx.conf:/etc/nginx/nginx.conf

现在您的conf被完全忽略了,nginx只是很高兴地使用它的正常默认的conf,它处于正常的、默认的位置。

一旦你解决了这个问题,我怀疑你会遇到下一个问题。一些注意事项:

  • 从你的措辞来看,我认为你关心的是favicon.ico的404。每个浏览器都会自动查找偏袒者,并显示在浏览器选项卡中。许多站点都没有,所以您可以在日志中始终看到针对这些请求的404。这不是什么值得担心的事情--除非您已经添加了一个favicon.ico,并且不知道它为什么没有出现。
  • 屏幕截图显示您正在访问一个IP地址--您的nginx.conf中的哪个nginx.conf块应该处理这个问题?它们都有一个server_name (不包括IP),没有一个被标记为default_server。我不知道那里会发生什么。为了避免怀疑,您可能应该使用设置默认服务器,并且无论如何使用您的服务器名来访问站点。
  • 我确信它就在这里(否则你会看到各种各样的错误),但是你的对接结构的格式都被破坏了。如果你花点时间在你的真实文件中使用正确的格式--它更容易被阅读,我们甚至可以复制粘贴它并自己尝试它,这将使别人更容易帮助你。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59232246

复制
相关文章

相似问题

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