我正在尝试将neo4j数据库暴露给互联网。
出于安全考虑,我想通过nginx将其隐藏在SSL / basic_auth组合后面。这是相应的nginx配置:
location /neo4j/ {
proxy_pass https://localhost:7473/;
proxy_read_timeout 600;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X_FORWARDED_PROTO https;
proxy_set_header Host $http_host;
proxy_buffering off;
proxy_redirect off;
auth_basic "restricted";
auth_basic_user_file /etc/nginx/auth/htpasswd;
proxy_headers_hash_max_size 1024;
proxy_headers_hash_bucket_size 128;
proxy_ssl_session_reuse off;
rewrite /neo4j/(.*) /$1 break;
}
虽然我能够访问https://example.com/neo4j/browser,但网络界面告诉我,它无法连接到neo4j,我的webbrowser的控制台被OPTIONS https://example.com/db/data 405(Not allowed)
填充
我还尝试将内置在https服务器中的neo4j与身份验证扩展(https://github.com/neo4j-contrib/authentication-extension)结合使用。 使用此选项,我还可以访问Web界面。
但界面还显示,它无法连接到neo4j,并且webbrowser的控制台被OPTIONS http://example.com:7473/db/data/ net::ERR_EMPTY_RESPONSE
填充并且提示The page at 'https://example.com:7473/browser/' was loaded over HTTPS, but displayed insecure content from 'http://example.com:7473/db/data/': this content should also be loaded over HTTPS.
有谁知道,如何让它运作?非常感谢提前!
答案 0 :(得分:3)
我遇到了同样的问题,并且有点奇怪的是缺乏关于Nginx作为网络服务器和neo4j的信息。奇怪的是,官方文档中对反向代理的唯一引用是Apache - 没有留下深刻的印象。
仅供参考我默认使用dockerised neo4j(https://github.com/neo4j/docker-neo4j/tree/master/2.3.2)(如果您想知道其他设置)。如果你在docker之外本地运行neo4j应该没关系。以下Nginx conf将是相同的。
location /neo4j/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_buffering off;
proxy_pass http://YOUR-IP:7474/browser/;
}
location /db/data/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_buffering off;
proxy_pass http://YOUR-IP:7474/db/data/;
}
如果您使用的是HTTPS而非HTTP,请将您的IP 替换为 7474 7473 。
这对我有用。
答案 1 :(得分:2)
需要OPTIONS
请求来验证与Neo4j服务器的连接。我认为这是验证连接的心跳。似乎Nginx不支持OPTIONS
请求,但请求可以被拦截如下:
location / {
if ($request_method = OPTIONS ) {
add_header Access-Control-Allow-Origin "https://example.com";
add_header Access-Control-Allow-Methods "GET, OPTIONS";
add_header Access-Control-Allow-Headers "Authorization";
add_header Access-Control-Allow-Credentials "true";
add_header Content-Length 0;
add_header Content-Type text/plain;
return 200;
}
}
来源:http://blog.rogeriopvl.com/archives/nginx-and-the-http-options-method/