Nginx Google fonts 역방향 프 록 시 설정 HTTP 2 / SSL 지원

블 로그 테마 에 Google fonts PT Serif 글꼴 을 사 용 했 기 때문에 국내 에 서 는 중과 대 에이 전 트 를 통 해서 만 Google fonts 글꼴 을 사용 할 수 있 습 니 다.그러나 최근 에는 속도 가 불안정 하고 응답 시간 이 600 ms 를 넘 는 경우 도 있다.마침 vultr VPS 가 있어 서 직접 만 들 었 어 요.
VPS 환경 은 다음 과 같 습 니 다.
  • Ubuntu 14.04
  • Nginx 1.12.0 (최신 버 전 은 이전 과 다 름)
  • Openssl 1.0.2j (새 Nginx http2 오픈 에 필요 한 최소 openssl 버 전)
  • Nginx 다시 컴 파일
    이전에 컴 파일 설치 가 관련 모듈 을 열지 않 았 다 면 다시 컴 파일 해 야 합 니 다. 매개 변 수 는 다음 과 같 습 니 다.
    ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-openssl=/usr/local/ssl --with-http_v2_module --with-http_sub_module

    컴 파일 이 끝나 도 틀 리 지 않 으 면 make && make install OK.
    Nginx 반전 설정
    기본 설정
    upstream google {
        server fonts.googleapis.com:80;
    }
    
    upstream gstatic {
        server fonts.gstatic.com:80;
    }
    proxy_temp_path   /your/path/tmp 1 2;
    proxy_cache_path  /your/path/cache levels=1:2 keys_zone=cache1:100m inactive=30d max_size=1g;

    80 포트 설정
    server {
        listen 80;
        server_name your.proxy.domain;
        root /your/path/;
        location /css {
            sub_filter 'fonts.gstatic.com' 'your.proxy.domain';
            sub_filter_once off;
            sub_filter_types text/css;
            proxy_pass_header Server;
            proxy_set_header Host fonts.googleapis.com;
            proxy_set_header Accept-Encoding '';
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;
            proxy_pass http://google;
            proxy_cache cache1;
            proxy_cache_key $host$uri$is_args$args;
            proxy_cache_valid 200 304 10m;
            expires 365d;
        }
        location / {
            proxy_pass_header Server;
            proxy_set_header Host fonts.gstatic.com;
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;
            proxy_pass http://gstatic;
            proxy_cache cache1;
            proxy_cache_key $host$uri$is_args$args;
            proxy_cache_valid 200 304 10m;
            expires 365d;
        }
    }

    443 포트 설정
    우선 당신 은 무료 HTTPS 인증 서 를 가지 고 있어 야 합 니 다. 이것 은 제 이전 글 을 참고 할 수 있 습 니 다: 무료 Https 인증서 (Let 'S Encrypt) 신청 과 설정sub_filter 필드 를 설정 할 때 도 메 인 이름 에 https: / 를 추가 해 야 합 니 다. 그렇지 않 으 면 프 록 시 CSS 파일 의 글꼴 파일 참조 가 HTTP 로 요청 되 었 습 니 다 blocked/mixed-content 오류 가 발생 할 수 있 습 니 다.
    server {
        listen 443 ssl http2;
    
        ssl on;
        ssl_certificate /etc/letsencrypt/live/your.proxy.domain/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/your.proxy.domain/privkey.pem;
        ssl_dhparam /etc/ssl/certs/dhparams.pem;
        ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers HIGH:!aNULL:!MD5;
    
        server_name  your.proxy.domain;
        root /var/sites/fonts/;
    
        location /css {
            sub_filter 'http://fonts.gstatic.com' 'https://your.proxy.domain';
            sub_filter_once off;
            sub_filter_types text/css;
            proxy_pass_header Server;
            proxy_set_header Host fonts.googleapis.com;
            proxy_set_header Accept-Encoding '';
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;
            proxy_pass http://google;
            proxy_cache cache1;
            proxy_cache_key $host$uri$is_args$args;
            proxy_cache_valid 200 304 10m;
            expires 365d;
        }
    
        location / {
            proxy_pass_header Server;
            proxy_set_header Host fonts.gstatic.com;
            proxy_redirect off;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;
            proxy_pass http://gstatic;
            proxy_cache cache1;
            proxy_cache_key $host$uri$is_args$args;
            proxy_cache_valid 200 304 10m;
            expires 365d;
        }
    }

    안전 도 난 방지 체인
    다른 사람 에 게 공유 하지 않 으 면 설정 에 refer 화이트 리스트 를 추가 하여 판단 해 야 합 니 다. 조건 에 맞지 않 으 면 403 으로 돌아 갑 니 다.
    valid_referers server_name *.your.domain.com *.other.domain.com;
    if ($invalid_referer) {
        return 403;
    }

    블 로그 원문:https://keelii.github.io/2017/04/22/proxy-google-fonts-with-ssl-http2-support/

    좋은 웹페이지 즐겨찾기