10단계 설명서: SSL을 사용하여 Ubuntu에서 Varnish+Nginx+PHP 실행
나는 짜맞추는 좌절을 겪고 빠른 안내서를 써서 처음부터 끝까지 과정을 상세하게 설명하기로 결정했다.
처음에 나는 Hitch를 사용하여 작업의 SSL 부분을 완성하려고 시도했지만 결과는 완전히 시간을 낭비했다. (주로 문서가 매우 엉망이기 때문이다.)다른 한편, HAProxy는 최종적으로 좋은 해결 방안이 되었고 부하 균형 같은 다른 좋은 기능도 포함했다.
우리 바로 시작합시다.다음은 내가 이 문장에서 토론한 문제다.
0. 시작
필요한 사항:
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/
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.vcl
및 backend default
포트가 8080
로 설정되었는지 확인sudo systemctl daemon-reload && sudo service varnish restart
8. HAProxy 설치 및 구성
sudo apt-get install haproxy
sudo vim /etc/haproxy/haproxy.cfg
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에만 해당)
$proxies
의 App\Http\Middleware\TrustProxies
속성에 추가합니다.protected $proxies = ['172.1.35.35'];
참고 로드 밸런서 뒤에서 IP를 안정적으로 확인할 수 없는 경우 다음을 수행할 수 있습니다.protected $proxies = '*';
유용한 링크
감사합니다!
이 안내서가 당신에게 도움이 되기를 바랍니다. 당신의 관심에 감사드립니다.
만약 위에서 수정한 것이 있다면, 평론을 남겨 주십시오. 저는 글을 업데이트할 것입니다.
Reference
이 문제에 관하여(10단계 설명서: SSL을 사용하여 Ubuntu에서 Varnish+Nginx+PHP 실행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/adam_crampton/10-step-guide-varnish-nginx-php-on-ubuntu-with-ssl-28do텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)