Q&A

클라우드플레어와 letsencrypt 이용 질문드립니다.

2020.04.01 22:48
384
0
CMS/프레임워크 WordPress
개발 언어 PHP 7.0

하나의 서버에 홈페이지가 A와 B가있습니다.

A는 클라우드플레어를 적용하고 B사이트는 letsencrypt를 적용했습니다. 

그런데 포트때문인지 B사이트를 443포트로 진입하게되면 A사이트가 출력이되버립니다. (도메인은 B사이트 화면은 A사이트로 출력됩니다.)

 

이런경우에는 어떻게해야되나요..두개다 클라우드플레어를 사용하고싶은데 b사이트는 lets를 쓰는게 편리해서 사용하려고합니다. ㅠ

댓글 11

  • 2020.04.01 23:09 #1371067
    서버 세팅이 잘못되어 있는것 같습니다.
    아마 443포트에 A사이트가, 다른 포트에 B사이트가 설치되어 있는것 같은데 그냥 B사이트도 443 포트에 설치하시면 됩니다. 요즘 대부분의 접속자가 SNI 지원 브라우저를 사용하므로 예전처럼 굳이 별도 포트로 분리해가며 사이트 운영하실 필요 없습니다.
  • 2020.04.01 23:19 #1371080
    답변감사합니다. 흠..A사이트는
    listen 80 default_server;
    listen [::]:80 default_server;
    위와 같이 설정하고 B사이트는
    listen 443 ssl http2; 이처럼 설정을했는데 혹시 어디서에서 잘못된건지 확인할 수 있는 방법이 있을까요..nginx를 사용중입니다.
  • 2020.04.02 00:30 #1371109
    nginx 설정 파일을 그대로 복붙해보시면 답변 주실거같네요
  • 2020.04.02 00:48 #1371118
    네 답변 감사합니다. 글 수정이 안되서 댓글에 남겨놨습니다.ㅠ
  • 2020.04.02 00:47 #1371114

    댓글이 달려서 글 수정이 안되네요 ㅠ nginx A사이트 conf 설정입니다.

    server {
        listen      80 default_server;
        listen [::]:80 default_server;
        server_name  A사이트;
        root   /home/A사이트/public_html;

        location / {
            index  index.php index.html
            proxy_connect_timeout 600;
            proxy_send_timeout 600;
            proxy_read_timeout 600;
            send_timeout 600;

            proxy_buffers 16 16k;
            proxy_buffer_size 32k;

            fastcgi_buffers 16 16k;
            fastcgi_buffer_size 32k;
            fastcgi_read_timeout 600;

     }

            location ~ [^/]\.php(/|$) {
            fastcgi_split_path_info ^(.+?\.php)(/.*)$;
            if (!-f $document_root$fastcgi_script_name) {
                return 404;
            }
    #       location ~ /.well-known {

    #       allow all;

    #       }
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;

     

    아래는 B사이트 conf 설정 입니다.

    server {

            listen  443 ssl http2;
            root   /home/B사이트/public_html;

            index  index.php index.html;

            server_name  B사이트 주소 www.B사이트 주소;

            charset utf-8;

    # Letsencrypt 기본 RSA 인증서
    ssl_certificate "/etc/letsencrypt/live/B사이트 주소/fullchain.pem";
    ssl_certificate_key "/etc/letsencrypt/live/B사이트 주소/privkey.pem";
    ssl_dhparam "/etc/ssl/certs/dhparam.pem";

            location / {
             
                    try_files $uri $uri/ =404;
            }
            location ~ [^/]\.php(/|$) {
            fastcgi_split_path_info ^(.+?\.php)(/.*)$;
            if (!-f $document_root$fastcgi_script_name) {
                return 404;
            }
    #       location ~ /.well-known {
        
    #       allow all;

    #       }
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;
            fastcgi_index index.php;
            include fastcgi_params;

        }

    글 수정이 안되서 이렇게 댓글로 남깁니다ㅠ 

  • 2020.04.02 02:45 #1371185

    A/B사이트 모두 SSL 적용후 사용하시는걸 권장드립니다. 한쪽만 적용하려다 보니 설정이 꼬인 것으로 보입니다.(SSL 설정 자체는 B사이트 것으로 적용되었으나 기본 사이트가 A 사이트여서 나머지 설정이 A사이트 기준으로 적용된 것으로 추정됩니다)

    p.s.) 클라우드플레어 사용중이시라면 서버<->클라우드플레어 사이 암호화 용도의 인증서를 무료로 받으실수 있습니다.(SSL/TLS-Origin Server-Origin Certificates. 최대 15년까지 유효한 인증서이나 일반 브라우저용으로 사용할순 없습니다)

  • 2020.04.02 03:06 #1371194
    A사이트는 클라우드플레어로 SSL을 적용하고 B사이트는 LETSENCRY로 적용을 하려고했었습니다. 인증서받는거도있군요. 확인해보겠습니다. 답변 감사드립니다.
  • 2020.04.02 03:12 #1371206
    클플 설정에 Flexible로 되어 있는걸 Full로 변경하셔야 할겁니다. 그래야 서버<->클플 사이도 암호화됩니다.
    이용자 입장에서는 큰 차이는 없습니다만(둘다 이용자가 보는 인증서는 클플 인증서입니다) 보안 측면에서는 Full이 더 좋습니다.
  • 2020.04.02 02:51 #1371191
    1. 기존 nginx conf 파일

    server {
    listen 80;
    server_name yncare.net;
    root /home/yncare/www;
    index index.php index.html index.htm;
    charset utf-8;

    location / {
    try_files $uri $uri/ =404;
    }

    include snippets/well-known.conf;
    #include snippets/wp-rewrite.conf;
    include snippets/xe-rewrite.conf;

    location ~ \.php$ {
    fastcgi_pass unix:/run/php/pool.yncare.sock;
    include snippets/fastcgi-php.conf;
    limit_req zone=antiddos burst=12 nodelay;
    }

    location ~* \.(jpe?g|png|gif|bmp|ico|svg|swf|flv|avi|wav|mp[34]|woff|ttf|s?css|less|js)$ {
    expires 15d;
    log_not_found off;
    }
    }
    server {
    listen 80;
    server_name www.yncare.net;

    location / {
    return 301 http://yncare.net$request_uri;
    expires epoch;
    }

    include snippets/well-known.conf;
    }

    2. 변경한 nginx conf 파일

    server {
    listen 80;
    server_name yncare.net www.yncare.net;
    rewrite ^/(.*) https://yncare.net/$1 permanent;
    }

    server {
    listen 443 ssl http2;
    server_name www.yncare.net;
    ssl_certificate /etc/letsencrypt/live/yncare.net/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yncare.net/privkey.pem;

    rewrite ^/(.*) https://yncare.net/$1 permanent;
    }


    server {
    listen 443 ssl http2;
    server_name yncare.net;
    root /home/yncare/www;
    index index.php index.html index.htm;
    charset utf-8;

    # if ($http_host = "www.yncare.net") {
    # rewrite ^ https://yncare.net$request_uri permanent;
    # }

    location / {
    try_files $uri $uri/ =404;
    }

    include snippets/well-known.conf;
    #include snippets/wp-rewrite.conf;
    include snippets/xe-rewrite.conf;

    location ~ \.php$ {
    fastcgi_pass unix:/run/php/pool.yncare.sock;
    include snippets/fastcgi-php.conf;
    limit_req zone=antiddos burst=12 nodelay;
    }

    location ~* \.(jpe?g|png|gif|bmp|ico|svg|swf|flv|avi|wav|mp[34]|woff|ttf|s?css|less|js)$ {
    expires 15d;
    log_not_found off;
    }

    ssl_certificate /etc/letsencrypt/live/yncare.net/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yncare.net/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/yncare.net/chain.pem;
    ssl_dhparam /etc/nginx/ssl/dhparam.pem;
    ssl_stapling on;
    ssl_stapling_verify on;
    }

    3. nginx restart

    service nginx restart

    제 nginx 설정입니다.
    1. 기존은 그냥 80 포트로 사용할 때
    2. ssl 적용 후 설정입니다.
    3. 적용완료했으면 nginx를 재실행해주면 됩니다.
  • 2020.04.02 03:07 #1371200
    한쪽만 SSL 적용하는건 되는데 한 서버에 두개의 사이트가 있어서요. 한쪽은 클라우드플레어로 SSL을 활성화시킨상태고 한쪽은 letsencry로 적용을 하려고하고있습니다.
  • 2020.04.02 03:50 #1371211

    1. 두 사이트 모두 Let's Encrypt로 인증서를 발급받습니다. 클플 SSL이 이미 적용되어 있더라도 무료인증서 발급받는 데 아무 지장 없습니다. 클플에서 다운받을 수 있는 내부통신 전용 인증서도 필요없습니다. 돈 드는 것도 아니니 그냥 둘 다 무료인증서로 SSL부터 적용하세요. 즉, 두 사이트 모두 클플 사용 여부와 무관하게 443 포트로 https 접속이 가능한 상태로 만들어야 합니다. 클플 연동은 그 다음입니다.

     

    2. 클플을 사용하고 싶은 사이트는 클플 SSL을 Full로 설정합니다.

     

    오류 없이 안정적으로 사용할 수 있는 것은 이 방법이 유일합니다. 서버에 SSL을 설치하지 않고 클플 SSL을 Flexible로 사용하거나, SSL 지원되는 사이트와 그렇지 않은 사이트를 섞어서 사용하면 클플을 통해 들어오는 https 접속이 80포트를 사용하게 되는 등 여러 가지 혼란이 발생합니다.