Я пытаюсь настроить рой докеров с несколькими сетями, поэтому я могу запускать набор служб (в разных версиях) в разных сетях роя. Я также хочу получить доступ к этим сервисам вне роя, но не хочу бороться за порты каждый раз, когда я запускаю новый сервис.
Чтобы справиться с этим, я пытаюсь настроить прокси с помощью nginx, поэтому я могу указать http: //service-v1.swarm-master/config/ в мой etcd-viewer, работающий на http: //etcd-viewer.rest-test: 8080 на отдых-тест оверлейная сеть; все на рое. У меня сейчас немного болит голова!
При переходе на http: // service-v1.swarm-master / config / я встречаю страницу 404:
HTTP ERROR 404
Problem accessing /config/. Reason:
Not Found
Powered by Jetty://
Изнутри моего контейнера nginx я убедился, что действительно могу получить доступ к службам, к которым я пытаюсь получить доступ, выполнив ping -c1 etcd-viewer
и ping -c1 etcd-viewer.rest-test
. Есть доступ к обоим изнутри работающего контейнера nginx.
Так почему же мой nginx.conf не работает? Он установлен на /etc/nginx/conf.d/
.
resolver 127.0.0.11;
upstream config {
server etcd-viewer.rest-test:8080;
}
log_format compression '$remote_addr - $remote_user [$time_local] '
'"$request" $status $request_body ($body_bytes_sent) '
'"$http_referer" "$http_user_agent" "$gzip_ratio"';
server {
listen 80;
#server_name docker.cdrator.com;
access_log /var/log/nginx/access.log compression;
# disable any limits to avoid HTTP 413 for large image uploads
client_max_body_size 0;
# required to avoid HTTP 411: see Issue #1486 (https://github.com/docker/docker/issues/1486)
chunked_transfer_encoding on;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /config/ {
proxy_pass http://config;
proxy_set_header Host $http_host; # required for docker client's sake
proxy_set_header X-Real-IP $remote_addr; # pass on real client's IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 900;
}
location /basic_status {
stub_status;
}
}
Внес небольшие изменения в конфигурацию и решил переопределить основной nginx.conf. Это не так чисто, но пока работает.
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
upstream config {
server etcd-viewer.rest-test:8080;
}
server {
listen 80;
location /etcd {
proxy_set_header Host $http_host; # required for docker client's sake
proxy_set_header X-Real-IP $remote_addr; # pass on real client's IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 900;
proxy_pass http://config;
}
location /basic_status {
stub_status;
}
}
include /etc/nginx/conf.d/*.conf;
}