클라이언트가 자체 서명 된 인증서를 설치할 필요없이 연결할 수 있도록 내부 API에 대한 프록시를 작성 중입니다.
클라이언트 (빌드, 소유 및 내부에서만 사용)는 SSL을 통해 nginx 상자에 연결되며 XSendfile 을 사용 하여 응용 프로그램 수준 (레일 앱)에서 자격 증명을 확인합니다. 자격 증명이 유효하면 연결이 nginx로 다시 전달되며 여기서 proxy_pass를 사용하여 업스트림 서버로 연결을 보냅니다.
이제 이것은 표준 http 연결에 효과적이지만 인증서를 믹스에 추가하는 방법을 알아 내려고합니다.
이 질문은 거의 동일 이 하나 ,하지만 어색 인증서 요구 사항.
nginx에서도 가능합니까? 더 나은 해결책이 있습니까?
또한 클라이언트-> nginx에서 http를 설정하고 nginx에서 API로 자체 서명 된 인증서를 설정했습니다.
답변
nginx를 사용하려는이 질문에 걸려 넘어지는 사람은 일반 프록시처럼 이것을 설정하고 백엔드에서 자체 서명 된 인증서를 수락하려면 내 보낸 pem 인증서 (및 키)를 제공하고 SSL 확인을 설정해야합니다 떨어져서. 예를 들면 다음과 같습니다.
...
server {
listen 10.1.2.3:80;
server_name 10.1.2.3 myproxy.mycompany.com;
location / {
proxy_pass https://backend.server.ip/;
proxy_ssl_trusted_certificate /etc/nginx/sslcerts/backend.server.pem;
proxy_ssl_verify off;
... other proxy settings
}
보안 백엔드가 IP / 포트 쌍마다 여러 호스트가 제공되는 서버 이름 식별 SNI를 사용하는 proxy_ssl_server_name on;
경우 구성 에 포함해야 할 수도 있습니다 . 이것은 nginx 1.7.0 이상에서 작동합니다.
답변
나는 당신이 아마 이런 것을 원한다고 생각합니다 (이 예제에서는 분명히 단순화되었습니다).
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream backend {
server mybackendserver:443;
}
server {
server_name localhost;
listen 443 ssl;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
ssl_verify_client off;
location / {
proxy_pass https://backend;
proxy_set_header Host $http_host;
proxy_set_header X_FORWARDED_PROTO https;
}
}
}
예를 들어 프록시 된 호스트 이름이 nginx 프록시 서버에서 사용 된 호스트 이름과 같지 않은 경우 “Host”를 명시 적으로 변경해야합니다.
답변
앞으로이 문제를 겪는 사람에게는 nginx를 사용하지 않았습니다.
대신 “클라이언트 모드”에서 stunnel을 사용했습니다. 설정이 매우 쉽고 필요한 것을 정확하게 수행합니다.