[英]Nginx Docker 400 Bad Request
我目前正在嘗試將nexus托管為組織內docker映像的私有注冊表。 我的nginx配置如下。
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;
server {
listen 6666; ### Docker Hosted Repo HTTPS port
server_name box.company.net; ### Nexus Server
keepalive_timeout 60;
ssl on;
ssl_certificate /etc/ssl/certs/nexus.crt;
ssl_certificate_key /etc/ssl/certs/nexus.key;
ssl_ciphers HIGH:!kEDH:!ADH:!MD5:@STRENGTH;
ssl_session_cache shared:TLSSSL:16m;
ssl_session_timeout 10m;
ssl_prefer_server_ciphers on;
client_max_body_size 0;
chunked_transfer_encoding on;
location /v2/ {
if ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" ) {
return 404;
}
error_log /var/log/nginx/error.log debug;
access_log /var/log/nginx/docker.log;
proxy_set_header Host $http_host;
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_pass http://box.company.net:4444/;
proxy_read_timeout 900;
}
location / {
error_log /var/log/nginx/error.log debug;
access_log /var/log/nginx/docker.log;
proxy_set_header Host $http_host;
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_pass http://box.company.net:4444/;
proxy_read_timeout 90;
}
}
已在具有https端口6666的nexus(在端口4444中運行)中配置了托管的docker repo。
目前,我們能夠登錄到docker Registry。
[test @ server〜] $ docker登錄-u admin -p admin123 box.company.net:6666登錄成功
但是,當我們嘗試將帶標簽的圖像推送到nexus托管的docker注冊表時,它會拋出400 Bad Request錯誤。
[test @ server〜] $ docker push box.company.net:6666/alpine推送引用存儲庫[box.company.net:6666/alpine] 3fb66f713c9f:正在准備解析HTTP 400響應正文的錯誤:無效字符'<'尋找值的開頭:“ \\ n \\ n \\ n \\ n 400-Nexus Repository Manager \\ n \\ n \\ n \\ n \\ n(新圖片).src = \\” https://box.company.net:6666 /favicon.ico?3.2.1-01\\"</script>\\n \\ n https://box.company.net:6666 / favicon-32x32.png?3.2.1-01 \\“ size = \\” 32x32 \\“> \\ n https://box.company.net:6666 / safari-pinned-tab.svg?3.2.1-01 \\” color = \\“#5bbad5 \\”> \\ n https://box.company .net:6666 / favicon-16x16.png?3.2.1-01 \\“ size = \\” 16x16 \\“> \\ n https://box.company.net:6666 / favicon.ico?3.2.1-01 \\ “> \\ n https://box.company.net:6666/mstile-144x144.png?3.2.1-01\\">\\n \\ n \\ n https://box.company.net:6666/static/ css / nexus-content.css?3.2.1-01 \\“ /> \\ n \\ n \\ n \\ n https://box.company.net:6666\\">\\n \\ n https://box.company .net:6666 / static / images / nexus.png?3.2.1-01 \\“ /> \\ n \\ n \\ n \\ n Nexus Repository Manager \\ n \\ n \\ n OSS 3.2.1-01 \\ n \\ n \\ n \\ n \\ n \\ n \\ n \\ n https:// bo x.company.net:6666/static/rapture/resources/icons/x32/exclamation.png?3.2.1-01\\"/>\\n錯誤400 \\ n錯誤的請求\\ n \\ n \\ n \\ n
該URL不支持HTTP方法POST \\ n \\ n
\\ n \\ n \\ n \\ n \\ n“
我是否缺少一些重要的Nginx配置? 還是我的要求格式錯誤。
它現在正在工作。 以下是我的Nginx配置。
server {
proxy_send_timeout 120;
proxy_read_timeout 300;
proxy_buffering off;
tcp_nodelay on;
server_tokens off;
client_max_body_size 1G;
listen 80;
server_name box.company.net;
location / {
rewrite ^(.*) https://box.company.net$1 permanent;
}
}
server {
listen 443;
server_name box.company.net;
keepalive_timeout 60;
ssl on;
ssl_certificate /etc/ssl/certs/nexus.crt;
ssl_certificate_key /etc/ssl/certs/nexus.key;
ssl_ciphers HIGH:!kEDH:!ADH:!MD5:@STRENGTH;
ssl_session_cache shared:TLSSSL:16m;
ssl_session_timeout 10m;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header Host $http_host;
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_pass http://box.company.net:8082;
proxy_read_timeout 90;
}
}
# correlates to your nexus http connector
server {
listen 6666;
server_name box.company.net;
keepalive_timeout 60;
ssl on;
ssl_certificate /etc/ssl/certs/nexus.crt;
ssl_certificate_key /etc/ssl/certs/nexus.key;
ssl_ciphers HIGH:!kEDH:!ADH:!MD5:@STRENGTH;
ssl_session_cache shared:TLSSSL:16m;
ssl_session_timeout 10m;
ssl_prefer_server_ciphers on;
client_max_body_size 1G;
chunked_transfer_encoding on;
### Block for Search,Pull,Push of Docker Images via Nexus Hosted Repo ####
location / {
access_log /var/log/nginx/docker.log;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
if ($request_method !~* GET) {
proxy_pass http://box.company.net:4444;
}
if ($request_method = GET) {
proxy_pass http://box.company.net:5555;
}
proxy_read_timeout 90;
}
}
推送圖像時缺少名稱空間。
查看文檔( https://books.sonatype.com/nexus-book/3.0/reference/docker.html#_accessing_repositories ):
docker <command> <nexus-hostname>:<repository-port>/<namespace>/<image>:<tag>
你可以嘗試一下
docker push server.int.org.com:6666/alpine/alpine
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.