10단계 설명서: SSL을 사용하여 Ubuntu에서 Varnish+Nginx+PHP 실행

8878 단어 phpdevopsnginxubuntu
SSL 설정Varnish를 사용하는 것은 필요한 모든 정보를 직접 얻을 수 있는 곳이 없기 때문에 까다로울 수 있습니다.
나는 짜맞추는 좌절을 겪고 빠른 안내서를 써서 처음부터 끝까지 과정을 상세하게 설명하기로 결정했다.
처음에 나는 Hitch를 사용하여 작업의 SSL 부분을 완성하려고 시도했지만 결과는 완전히 시간을 낭비했다. (주로 문서가 매우 엉망이기 때문이다.)다른 한편, HAProxy는 최종적으로 좋은 해결 방안이 되었고 부하 균형 같은 다른 좋은 기능도 포함했다.
우리 바로 시작합시다.다음은 내가 이 문장에서 토론한 문제다.
  • Ubuntu 18.04
  • PHP7.4
  • Nginx
  • 바니시 5.2.1
  • Letsencrypt SSL
  • HAProxy
  • 라빌 8
  • 다른 스택을 사용하는 경우 PHP 및 Laravel 비트를 무시할 수 있습니다.

    0. 시작
    필요한 사항:
  • Ubuntu 18.04 설치 + sudo SSH 액세스
  • Nginx에 추가할 서버 블록에 대한 DNS (본문은 example.com)

  • 1. Nginx 설정
    다음과 같이 nginx를 설치합니다.
  • sudo apt update
  • sudo apt install nginx
  • 기본 포트를 설정하려면:
  • sudo vim /etc/nginx/sites-available/default
  • server {
      listen 8080 default_server;
      listen [::]:8080 default_server;
      ...
    }
    
    주의: 당분간 당신의 사이트를 위해 서버 블록을 만들지 마십시오. 우리는 곧 시작할 것입니다.

    2. PHP 7.4+ 설치에 필요한 확장
    PHP가 설치되어 있지 않은 경우 다음 명령을 실행하여 PHP 7.4 및 Laravel(대부분의 현대 PHP 어플리케이션) 프로젝트에 필요한 확장을 얻습니다.
  • sudo apt install software-properties-common
  • sudo add-apt-repository ppa:ondrej/php
  • sudo apt update
  • sudo apt install php7.4 php7.4-cli php7.4-fpm php7.4-json php7.4-common php7.4-mysql php7.4-zip php7.4-gd php7.4-mbstring php7.4-curl php7.4-xml php7.4-pear php7.4-bcmath

  • 3. FPM+Composer 설치
    필요한 경우 FPM 및 Composer를 설치합니다.
  • sudo apt install php7.4-fpm
  • sudo apt install composer

  • 4. Nginx 서버 블록 만들기
    이제 사이트를 위한 Nginx 서버 블록을 만들 수 있습니다.
  • sudo vim /etc/nginx/sites-available/example.com
  • 붙여넣기(또는 원하는 템플릿 사용):
  • server {
        listen 8080;
        server_name example.com www.example.com;
        root /var/www/example.com/public;
    
        add_header X-Frame-Options "SAMEORIGIN";
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Content-Type-Options "nosniff";
    
        index index.html index.htm index.php;
    
        charset utf-8;
    
        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }
    
        location = /favicon.ico { access_log off; log_not_found off; }
        location = /robots.txt  { access_log off; log_not_found off; }
    
        error_page 404 /index.php;
    
        location ~ \.php$ {
            fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
            include fastcgi_params;
        }
    
        location ~ /\.(?!well-known).* {
            deny all;
        }
    }
    
  • 파일을 저장하고 다음 명령을 실행하여 기호 링크를 생성합니다.
  • sudo ls -n /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
  • Nginx 재부팅: sudo service nginx restart

  • 5. Cerbot 설치
    웹 사이트에 Let's Encrypt 인증서를 요청하려면 Certbot을 설치해야 합니다.DNS 레코드가 이 서버를 가리키는지 확인하고 다음을 실행합니다.
  • sudo add-apt-repository ppa:certbot/certbot
  • sudo apt install python-certbot-nginx
  • sudo certbot --nginx -d example.com -d www.example.com
  • 리디렉션 없음
  • 선택
  • 편집/etc/nginx/sites-available/example.com 및 Certbot이 파일 하단에 추가한 SSL 행을 삭제합니다. 이렇게 표시됩니다.
  • listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    

    6. PEM 파일 준비
    그런 다음 SSL 에이전트에 대한 PEM 파일을 생성하여 추가로 사용해야 합니다.이를 위해 개인 키와 fullchain 키 값을 단일 파일에 추가합니다.
    루트sudo su로 전환한 다음:
    sudo cat /etc/letsencrypt/live/example.com/privkey.pem /etc/letsencrypt/live/example.com/fullchain.pem > /etc/ssl/private/exampledotcom.pem
    exit
    

    7. 페인트 설치 및 구성
    Varnish를 설치하고 구성할 수 있습니다.
  • sudo apt -y install varnish
  • 편집/lib/systemd/system/varnish.service 및 기본 포트를 6081에서 80으로 변경:
  • ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80 -T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m
    
  • 편집/etc/varnish/default.vclbackend default 포트가 8080로 설정되었는지 확인
  • 실행sudo systemctl daemon-reload && sudo service varnish restart
  • Varnish는 이제 HTTP 사이트에서 작업할 수 있습니다.

    8. HAProxy 설치 및 구성
  • HAProxy 설치: sudo apt-get install haproxy
  • 오픈 편집: sudo vim /etc/haproxy/haproxy.cfg
  • 프런트엔드 바인딩을 추가하여 앞에 생성된 PEM 파일을 가리킵니다.
  • frontend haproxynode
            bind *:443 ssl crt /etc/ssl/private/exampledotcom.pem
            mode http
            default_backend backendnodes
    
  • 백엔드 구성 + 노드 추가:
  • backend backendnodes
            balance roundrobin
            option forwardfor
            http-request set-header X-Forwarded-Port %[dst_port]
            http-request add-header X-Forwarded-Proto https if { ssl_fc }
            server example.com 172.1.35.35:80 check
    
    중요 위의 IP 주소는 호스트가 있는 서버의 IP 주소여야 합니다.ifconfig를 사용하여 주소를 확인합니다.
    구성에 오류가 있는지 테스트하려면 sudo haproxy -c -f /etc/haproxy/haproxy.cfg:

    9. 모든 것을 재부팅
  • sudo service nginx restart && sudo service varnish restart && sudo service haproxy restart

  • 10. Trust Agent 구성(Laravel에만 해당)
  • 단계 8의 서버 IP를 $proxiesApp\Http\Middleware\TrustProxies 속성에 추가합니다.
  • protected $proxies = ['172.1.35.35'];
    
    참고 로드 밸런서 뒤에서 IP를 안정적으로 확인할 수 없는 경우 다음을 수행할 수 있습니다.
    protected $proxies = '*';
    

    유용한 링크
  • Ubuntu 18.04+Nginx 설치 가이드: https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-18-04
  • Nginx 자습서를 암호화합니다https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-18-04.
  • VCL 참조: https://varnish-cache.org/docs/5.2/users-guide/vcl.html
  • 훌륭한 VCL 구성 템플릿을 찾을 수 있습니다: https://github.com/mattiasgeniar/varnish-5.0-configuration-templates

  • 감사합니다!
    이 안내서가 당신에게 도움이 되기를 바랍니다. 당신의 관심에 감사드립니다.
    만약 위에서 수정한 것이 있다면, 평론을 남겨 주십시오. 저는 글을 업데이트할 것입니다.

    좋은 웹페이지 즐겨찾기