我有一个CMS(grav)在Docker容器内部运行,它受到nginx服务的影响,作为反向代理将web地址redirect到一个端口(例如mydomain.de:80 -> 127.0.0.1:8001 )。
以下是我所观察到的:服务一般运行正常,但某些操作(例如尝试login)失败,并在Web界面显示错误消息:“无效的安全令牌”。
当然,这是太模糊的信息,甚至猜测什么组件configuration不当。 但是对于我来说,看起来nginx是否代理端口并不重要。 如果我只是离开nginx的一切工作正常,不pipe我在Docker中使用哪个端口或它映射到哪个端口。
例如没有 nginx的configuration工作正常:
EXPORT 80 , docker run -p 80:80 .. ,浏览mydomain.de:80 EXPORT 8001 , docker run -p 80:8001 .. ,浏览mydomain.de:80 EXPORT 80 , docker run -p 8001:80 .. ,浏览mydomain.de:8001 EXPORT 8001 , docker run -p 8001:8001 .. ,浏览mydomain.de:8001 只要我启动nginx作为代理服务器,我得到了描述的错误。 所以目前我猜Docker和Grav工作得很好,只是nginx没有正确的反向代理。
这是我的nginx服务器configuration:
map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 80; server_name mydomain.de; location / { proxy_pass http://127.0.0.1:8001; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; } }
这是我的nginx.conf加载上面的文件:
user www-data; worker_processes 4; pid /var/run/nginx.pid; events { worker_connections 768; # multi_accept on; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; gzip on; gzip_disable "msie6"; include /etc/nginx/sites-enabled/*; }
当grav位于代理之后时,创build会话可能会有问题。
尝试在Nginx中使用额外的头文件:
location / { ... proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Host $remote_addr; }
另外在grav中有一个reverse_proxy_setupconfiguration,你是否设置为true ?