Docker 编写 nginx 配置设置以在端口 8000 上广播
Docker compose nginx config setup to broadcast on port 8000
我在一个项目的末尾,我有一个 Nginx 作为 docker 容器中的路由器,它与端口 8000 上的测试节点应用程序一起工作,但我需要它指向另一个 Nginx Docker 为 运行 Django 应用程序设置的组合容器。我不认为第二个 Nginx 配置正确 运行 端口 8000 上的应用程序,我正在寻找任何建议。
基本上我一直在学习两个单独的教程,这就是它们的交集。
以下是我认为您需要的文件,但您可以随时索取任何其他文件。
docker-compose.prod.yml
version: '3.7'
services:
web:
build:
context: ./dcahill
dockerfile: Dockerfile.prod
command: gunicorn dcahill.wsgi:application --bind 0.0.0.0:8000
volumes:
- static_volume:/home/dchll/web/staticfiles
- media_volume:/home/dchll/web/mediafiles
expose:
- 8000
env_file:
- ./.env.prod
depends_on:
- db
db:
image: postgres:12.0-alpine
volumes:
- postgres_data:/var/lib/postgresql/data/
env_file:
- ./.env.prod.db
nginx:
build: ./nginx
volumes:
- static_volume:/home/dchll/web/staticfiles
- media_volume:/home/dchll/web/mediafiles
ports:
- 1337:80
depends_on:
- web
volumes:
postgres_data:
static_volume:
media_volume:
nginx.conf(不是主路由器将 public 流量引导至 8000)
upstream dcahill.com {
server web:8000;
}
server {
listen 80;
location / {
proxy_pass dcahill.com;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
client_max_body_size 100M;
}
location /staticfiles/ {
alias /home/dchll/web/staticfiles/;
}
location /mediafiles/ {
alias /home/dchll/web/mediafiles/;
}
}
server {
listen 443 ssl;
location / {
proxy_pass dcahill.com;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
client_max_body_size 100M;
}
location /staticfiles/ {
alias /home/dchill/web/staticfiles/;
}
location /mediafiles/ {
alias /home/dchll/web/mediafiles/;
}
}
我用于测试节点应用程序的主要 nginx 路由器配置很大,但这些是除了 SSL 和默认 html5 样板之外的唯一设置:
# Redirect all HTTP traffic to HTTPS
server {
listen 80;
server_name www.dcahill.com dcahill.com;
return 301 https://$host$request_uri;
}
# Listen for requests for dcahill on port 443 and return server open on port 8000
server {
listen 443 ssl;
server_name dcahill.com;
location / {
proxy_pass http://111.222.111.222:8000;
}
}
# Listen for requests for dcahill on port 443 and return server open on port 8000
server {
listen 443 ssl;
server_name www.dcahill.com;
location / {
proxy_pass http://111.222.111.222:8000;
}
}
我的运行测试节点脚本如下
const http = require('http')
const port = 8000
const requestHandler = (request, response) => {
console.log('received request')
response.end('Hello from app1!')
}
const server = http.createServer(requestHandler)
server.listen(port, (err) => {
console.log(`server is listening on ${port}`)
})
示例 docker-compose 配置将端口 8000
映射到 80
,然后 NGINX 配置将端口 80 重定向到外部未提供的 443。
您的 NGINX 服务需要将端口 80 和 443 放入容器(它正在侦听这些端口)。
nginx:
build: ./nginx
volumes:
- static_volume:/home/dchll/web/staticfiles
- media_volume:/home/dchll/web/mediafiles
ports:
- 443:443
- 80:80
depends_on:
- web
NGINX 服务将在 Docker 容器内的端口 8000 上反向代理到您的应用程序,但端口 8000 将在外部不可用。
我在一个项目的末尾,我有一个 Nginx 作为 docker 容器中的路由器,它与端口 8000 上的测试节点应用程序一起工作,但我需要它指向另一个 Nginx Docker 为 运行 Django 应用程序设置的组合容器。我不认为第二个 Nginx 配置正确 运行 端口 8000 上的应用程序,我正在寻找任何建议。
基本上我一直在学习两个单独的教程,这就是它们的交集。
以下是我认为您需要的文件,但您可以随时索取任何其他文件。
docker-compose.prod.yml
version: '3.7'
services:
web:
build:
context: ./dcahill
dockerfile: Dockerfile.prod
command: gunicorn dcahill.wsgi:application --bind 0.0.0.0:8000
volumes:
- static_volume:/home/dchll/web/staticfiles
- media_volume:/home/dchll/web/mediafiles
expose:
- 8000
env_file:
- ./.env.prod
depends_on:
- db
db:
image: postgres:12.0-alpine
volumes:
- postgres_data:/var/lib/postgresql/data/
env_file:
- ./.env.prod.db
nginx:
build: ./nginx
volumes:
- static_volume:/home/dchll/web/staticfiles
- media_volume:/home/dchll/web/mediafiles
ports:
- 1337:80
depends_on:
- web
volumes:
postgres_data:
static_volume:
media_volume:
nginx.conf(不是主路由器将 public 流量引导至 8000)
upstream dcahill.com {
server web:8000;
}
server {
listen 80;
location / {
proxy_pass dcahill.com;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
client_max_body_size 100M;
}
location /staticfiles/ {
alias /home/dchll/web/staticfiles/;
}
location /mediafiles/ {
alias /home/dchll/web/mediafiles/;
}
}
server {
listen 443 ssl;
location / {
proxy_pass dcahill.com;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
client_max_body_size 100M;
}
location /staticfiles/ {
alias /home/dchill/web/staticfiles/;
}
location /mediafiles/ {
alias /home/dchll/web/mediafiles/;
}
}
我用于测试节点应用程序的主要 nginx 路由器配置很大,但这些是除了 SSL 和默认 html5 样板之外的唯一设置:
# Redirect all HTTP traffic to HTTPS
server {
listen 80;
server_name www.dcahill.com dcahill.com;
return 301 https://$host$request_uri;
}
# Listen for requests for dcahill on port 443 and return server open on port 8000
server {
listen 443 ssl;
server_name dcahill.com;
location / {
proxy_pass http://111.222.111.222:8000;
}
}
# Listen for requests for dcahill on port 443 and return server open on port 8000
server {
listen 443 ssl;
server_name www.dcahill.com;
location / {
proxy_pass http://111.222.111.222:8000;
}
}
我的运行测试节点脚本如下
const http = require('http')
const port = 8000
const requestHandler = (request, response) => {
console.log('received request')
response.end('Hello from app1!')
}
const server = http.createServer(requestHandler)
server.listen(port, (err) => {
console.log(`server is listening on ${port}`)
})
示例 docker-compose 配置将端口 8000
映射到 80
,然后 NGINX 配置将端口 80 重定向到外部未提供的 443。
您的 NGINX 服务需要将端口 80 和 443 放入容器(它正在侦听这些端口)。
nginx:
build: ./nginx
volumes:
- static_volume:/home/dchll/web/staticfiles
- media_volume:/home/dchll/web/mediafiles
ports:
- 443:443
- 80:80
depends_on:
- web
NGINX 服务将在 Docker 容器内的端口 8000 上反向代理到您的应用程序,但端口 8000 将在外部不可用。