让我的web应用程序正确地使用https启动是有问题的。当前,当尝试访问站点时,它看起来像这样,有一个404错误。
我的docker-compose.yml
文件如下:
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
文件如下:
# 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有关的事情,所以我只是不知道我在哪里出错。请让我知道,如果有任何信息没有列出在这篇文章将有助于找出一个解决方案。谢谢大家抽出时间。
发布于 2019-12-08 10:00:14
您已经开始使用这些技术的非常复杂的第一步。从更简单的开始,一步一步地增加复杂性,可能会更容易,更好的学习体验。首先从一个普通的nginx容器开始,然后更新您的nginx.conf
并使https重定向工作。然后更新你的对接-撰写添加你的数据库并使它工作.等等,一步一步地添加API,这本身就是一个相当复杂的部分。从这样一个复杂的配置开始,作为您的第一步,您将--可以理解--不知道当它不工作时,需要查看的移动部件拼图中的哪些部分。
我猜你将面临一系列的问题,每个新的问题都暴露在你修复前一个问题的时候。
无论如何,从我能看到的第一个开始。您已经将nginx.conf
映射到容器中:
- ./nginx.conf:/home/comas/COMAS/COMAS-Docker/nginx.conf
但是nginx不会知道的。您正在使用的nginx Docker图像的文档 (参见“复杂配置”)是nginx服务器使用的nginx.conf
在/etc/nginx/nginx.conf
上使用的。如果您希望nginx使用您的conf,则需要将其映射到以下位置:
- ./nginx.conf:/etc/nginx/nginx.conf
现在您的conf被完全忽略了,nginx只是很高兴地使用它的正常默认的conf,它处于正常的、默认的位置。
一旦你解决了这个问题,我怀疑你会遇到下一个问题。一些注意事项:
favicon.ico
的404。每个浏览器都会自动查找偏袒者,并显示在浏览器选项卡中。许多站点都没有,所以您可以在日志中始终看到针对这些请求的404。这不是什么值得担心的事情--除非您已经添加了一个favicon.ico
,并且不知道它为什么没有出现。nginx.conf
中的哪个nginx.conf
块应该处理这个问题?它们都有一个server_name
(不包括IP),没有一个被标记为default_server
。我不知道那里会发生什么。为了避免怀疑,您可能应该使用设置默认服务器,并且无论如何使用您的服务器名来访问站点。https://stackoverflow.com/questions/59232246
复制相似问题