Я пытался заставить 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, чтобы увидеть фактическую связь с прокси-службой?