nginx proxy_pass w / взаимный TLS & Basi c auth дает 404 - PullRequest
0 голосов
/ 09 января 2020

Я пытался заставить NGINX переслать внешнему партнеру через proxy_pass.

  • Вызов действительной конечной точки с сервера NGINX работает правильно (с использованием cert / key и Basi). c auth.)
  • При вызове через NGINX прокси получается 404.
  • Было проведено тестирование с использованием curl (используется флаг -k b / c самоподписанного сертификата на Nginx)

Я не уверен, как получить какие-либо подробности из NGINX, кроме того, что в настоящее время находится в access.log, что не полезно.

NGINX config:

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    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;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    server {
        listen       443 ssl http2 default_server;
        listen       [::]:443 ssl http2 default_server;
        server_name  _;
        #root         /usr/share/nginx/html;

        ssl_certificate "/etc/nginx/server.crt";
        ssl_certificate_key "/etc/nginx/server.key";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;

        location / {
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header        Authorization   "Basic giant-base-64-hash";
                proxy_pass                https://third-party.com/;
                proxy_ssl_certificate     /etc/nginx/client.pem;
                proxy_ssl_certificate_key /etc/nginx/client.key;
        }       
    }

}

Вывод на консоль:

curl -k -v https://localhost/path/to/api
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Change cipher spec (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: C=<redact>; ST=<redact>; L=<redact>; O=<redact>; CN=<redact>
*  start date: Jan  9 12:03:16 2020 GMT
*  expire date: Jan  6 12:03:16 2030 GMT
*  issuer: C=<redact>; ST=<redact>; L=<redact>; O=<redact>; CN=<redact>
*  SSL certificate verify result: self signed certificate (18), continuing anyway.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x1481b70)
> GET /creds/link-ws/svc/nativeIdQuery HTTP/2
> Host: localhost
> User-Agent: curl/7.61.1
> Accept: */*
> 
* Connection state changed (MAX_CONCURRENT_STREAMS == 128)!
< HTTP/2 404 
< server: nginx/1.12.2
< date: Thu, 09 Jan 2020 18:34:50 GMT
< content-type: text/plain; charset=utf-8
< content-length: 21
< strict-transport-security: max-age=15768000
< 
* Connection #0 to host localhost left intact
default backend - 404

Конечная точка API верна; Я проверил маршрутизацию самому себе (локальная конечная точка поддельного сервера) и увидел выходные данные в файле access.log, а также - как уже упоминалось - когда я вызываю внутреннюю службу напрямую с того же хоста, она отлично работает.

Так что же еще может вызывать мои 404, и / или есть ли другие подробные записи в журнале, которые я могу использовать в NGINX, чтобы увидеть фактическую связь с прокси-службой?

...