Nginx 정적 자원 의 역방향 에이전트 구현
https://camo.githubusercontent.com/e19e230a9371a44a2eeb484b83ff4fcf8c824cf7/687474703a2f2f737562737461636b2e6e65742f696d616765732f62726f777365726966795f6c6f676f2e706e67
우 리 는 raw 를 통 해 원 url 을 발견 할 수 있 습 니 다.
http://substack.net/images/browserify_logo.png
이렇게 하 는 장점 중 하 나 는 https 사이트 에 http 링크 가 나타 나 는 것 을 방지 하 는 것 이다. 그렇지 않 으 면 클 라 이언 트 에서 위험 경 고 를 받 을 수 있다.github 은 세부 적 으로 매우 주도면밀 하 게 고려 했다.
기왕 수요 가 있 는 바 에 야 우 리 는 그것 을 실현 할 것 이다.일반적인 방법 은 응용 프로그램 을 써 서 원 격 정적 자원 을 캡 처 한 다음 에 전단 에 피드백 하 는 것 이다. 이것 은 간단 한 역방향 대리 이다.그러나 이렇게 하 는 것 이 비교적 번 거 롭 고 효율 도 높 지 않다. 사실은 우 리 는 nginx 를 통 해 이 정적 파일 들 을 직접 대리 할 수 있다.
nginx 의 proxypass 는 임의의 주 소 를 입력 하고 dns 분석 을 지원 합 니 다.그래서 제 생각 은 원래 url 을 사이트 자체 의 url 로 암호 화 하 는 것 입 니 다.위의
http://substack.net/images/browserify_logo.png
암호 화 가능
764feebffb1d3f877e9e0d0fadcf29b85e8fe84ae4ce52f7dc4ca4b3e05bf1718177870a996fe5804a232fcae5b893ea ( , )
그리고 우리 자신의 도 메 인 이름 아래 두 기:
https://ssl.youdomain.com/camo/764feebffb1d3f877e9e0d0fadcf29b85e8fe84ae4ce52f7dc4ca4b3e05bf1718177870a996fe5804a232fcae5b893ea
복호화 절 차 는 nginx 를 사용 하면 실현 하기 어 려 울 수 있 습 니 다. 따라서 사용자 가 상기 링크 를 통 해 요청 할 때 복호화 프로그램 에 전달 하 는 것 을 먼저 말 합 니 다. 여기 coffeescript 버 전의 예 가 있 습 니 다.
express = require 'express'
app = express()
app.get '/camo/:eurl', (req, res) ->
{eurl} = req.params
{camoSecret} = config #
rawUrl = util.decrypt eurl, camoSecret
return res.status(403).end('INVALID URL') unless rawUrl
res.set 'X-Origin-Url', rawUrl
res.set 'X-Accel-Redirect', '/remote'
res.end()
app.listen 3000
그리고 X - Accel - Redirect 응답 헤드 를 써 서 내부 점프 를 하면 다음 절 차 는 nginx 가 완성 합 니 다.다음은 완전한 nginx 프로필 예 입 니 다.
server {
listen 80;
server_name ssl.youdomain.com;
location /camo/ {
proxy_pass http://localhost:3000;
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_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_redirect off;
break;
}
location /remote {
internal;
resolver 192.168.0.21; # dns , nginx
set $origin_url $upstream_http_x_origin_url;
proxy_pass $origin_url;
add_header Host "file.local.com";
break;
}
}
nginx 의 upstream 모듈 은 모든 응답 헤드 에 $upstream 을 추가 합 니 다.http_ 접 두 사 를 변수 로 저장 하기 때문에 위의 예 에서 우 리 는 원래 url 을 X - Origin - Url 응답 헤드 에 두 었 고 nginx 에 서 는 $upstream 이 되 었 습 니 다.http_x_origin_url 변수, 하지만 proxypass 에 서 는 직접 인용 할 수 없습니다. set 를 통 해 설정 해 야 인용 할 수 있 습 니 다. 이것 은 이해 가 되 지 않 습 니 다. 고수 가 대답 할 수 있 기 를 바 랍 니 다.이렇게 되면 매번 사용자 가 요청 할 때마다
https://ssl.youdomain.com/camo/764feebffb1d3f877e9e0d0fadcf29b85e8fe84ae4ce52f7dc4ca4b3e05bf1718177870a996fe5804a232fcae5b893ea
nginx 가 잡 으 러 갑 니 다.
http://substack.net/images/browserify_logo.png
의 내용 을 사용자 에 게 되 돌려 줍 니 다.nginx 전에 varnish 를 추가 하여 정적 파일 의 내용 을 캐 시 할 수 있 습 니 다.이렇게 하면 githubuscontent 의 방법 과 더욱 일치 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.