안녕하세요,

 

현재  우분투 16.04 엔진엑스 php7.0 mariadb10을 vps에 설치해 사용하고 있습니다.

 

그런데 모든 jpeg,jpg 파일은 http로 접속이 가능하며 자동으로 https로 리다이렉트가 안되게 하고 싶은데요..

 

지금 서버블록에 아래와 같은 구문을 추가해두었는데,  http로 접속시 자동으로 https로 리다이렉트 되어 버립니다 ㅠㅠ

   location ~* \.(jpg|jpeg)$ {   
		}

 

http://example.com/example.jpg 로 접속시에는 http://로.

 

https://example.com/example.jpg 로 접속시에는 https://로 가게 만들고 싶은데요 ㅠㅠ

 

Stack Overflow에서 관련 정보를 찾아서 적용해봐도 여전히 안됩니다 ㅠㅠ

 

혹시 뭐가 문제인지 알려주실 분 있으신지요.

 

읽어주셔서 감사합니다

 

server {
    listen 80; 
    ssl off;
    server_name example.com www.example.com;
    root /var/www/example;
    index index.php;

   location ~* \.(jpg|jpeg)$ {   
		}

   location / {
       return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl http2;
    server_name  example.com www.example.com;
    root /var/www/example;
    index index.php;

	
	  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    ssl_dhparam /etc/letsencrypt/live/example.com/example.com.dhparam;
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4;
 
     
    # Set caches, protocols, and accepted ciphers. This config will 
    # merit an A+ SSL Labs score.
    ssl_session_cache shared:SSL:20m;
    ssl_session_timeout 10m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
	
    error_log /var/log/nginx/example.error.log warn;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # Allow Lets Encrypt Domain Validation Program
    location ^~ /.well-known/acme-challenge/ {
        allow all;
    }

    # Block dot file (.htaccess .htpasswd .svn .git .env and so on.)
    location ~ /\. {
        deny all;
    }
 
    # Block (log file, binary, certificate, shell script, sql dump file) access.
    location ~* \.(log|binary|pem|enc|crt|conf|cnf|sql|sh|key)$ {
        deny all;
    }
 

    location = /robots.txt {
        log_not_found off;
        access_log off;
    }

   location = /favicon.ico {
        log_not_found off;
        access_log off;
    } 


    # Rocket
    # Add a slash at the end of request */wp-admin
    rewrite /wp-admin$ $scheme://$host$uri/ permanent;


   location ~* \.(css|js|ico|gif|jpe?g|png|svg|eot|otf|woff|woff2|ttf|ogg)$ {
	expires max; 
    }
 

    location ~ /.well-known {
                allow all;
        }

    location ~ [^/]\.php(/|$) {
               try_files $uri =404;
               fastcgi_split_path_info ^(.+\.php)(/.+)$;
               fastcgi_pass unix:/run/php/php7.0-fpm.sock;
               fastcgi_index index.php;
	       fastcgi_read_timeout 180;
               fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
               include fastcgi_params;
        }


}
  • profile

    1. 정규식 없이 location / 이렇게 폴더 단위로 직접 선언한 것은 정규식을 사용해서 location ~* 문법으로 선언한 것보다 항상 우선순위를 가집니다. 꼭 모든 이미지 파일에 적용할 필요는 없고 첨부한 이미지 파일에만 적용해도 된다면 location /files/attach/images 이렇게 정규식을 사용하지 않도록 선언해 보세요. (location / 보다 나중에)

     

    2. 예전에 해당 주소를 한 번이라도 301 리다이렉트한 적이 있다면 브라우저에서 리다이렉트를 기억하고 있기 때문에 서버 설정을 어떻게 바꾸든 적용되지 않고 무조건 리다이렉트됩니다. expires가 없는 301 리다이렉트는 사실상 영원히 캐싱됩니다. 매우 위험한 설정이죠. 브라우저 캐시부터 비워보세요.

     

    그런데 이미지가 https로 로딩되면 뭔가 문제가 있나요? 반대의 경우라면 보안 경고가 나올 수도 있겠지만, https라서 문제가 생길 일은 없을 것 같은데요. nginx에서 정적 파일을 처리하는 데 눈에 띄는 부하가 발생하는 것도 아니고, https에는 http2가 적용되니 속도도 오히려 더 빠를 텐데...

  • profile ?
    기진곰님 친절한 답변 정말 감사합니다.

    제가 운영중인 작은 쇼핑몰이 있는데 전환율이 너무 낮아 네이버 페이를 입점해볼까 합니다만, 페이 검수를 진행하는 가운데 이미지 주소가 https로 리다이렉트되서 통과가 안됩니다..

    다른 부분은 거의 다 진행되었습니다만, 이 이미지가 리다이렉트 되는 부분이 해결이 안됩니다.

    말씀처럼 이전에는 쭉 301 리다이렉트가 되게 되어있었습니다. ㅠㅠ

    이미지 파일은 example.com/examle/image/2016/01 처럼 image/ 폴더 아래의 서브디렉토리에 년/월 별로 나뉘어 저장됩니다.

    그런데 image폴더의 서브디렉토리 안에 있는 이미지 파일들 전체를 location 으로 어떻게 표현야되는지 잘 모르겠습니다 ㅠㅠ

    아니면 아래처럼 일일이 다 적어야되는 방법밖에 없을까요..

    location /example/image/2016/01{}
    location /example/image/2016/02{}
  • ? profile
    location /example/image {

    이렇게 통째로 묶어 버리면 안되나요?
    만약 저 폴더 안에 이미지가 아닌 파일이 섞여 있다 하더라도
    일괄 적용했을 때 문제는 없을 듯 한데요.
  • ? profile

    매출과 직결되는 쇼핑몰의 경우 XE로서는 한계가 많이 있습니다. 당장 NPAY부터 어려운 문제가 발생하지만 앞으로 네이버쇼핑,다음 등 여러 문제들이 발생하고 해결해 나가려면 비용이 만만치 않게 들테데요.
    그냥 쇼핑몰 최적화된 솔루션을 이용하시는 것을 추천드립니다.

     

    그리고 최근버전 NPAY는 NPAY 주문도 자사쇼핑몰 주문과 똑같이 자동으로 재고차감등 자동으로 연동이 됩니다. 혹시 최근버전 NPAY API로 개발을 하신건지 궁금하네요. 그렇다면 비용도 또 들여서 개발하셧을텐데요...  쇼핑몰솔루션들은 지금 생각하는 모든 것들이 다 준비되어 있고 또 앞으로 시대상황에 따라 생겨나는 것들 대부분 이슈에 대응을 합니다.

  • profile ?
    기진곰님

    답변 정말 감사합니다. 알려주신 방법대로 하고, 사용 중인 웹브라우저의 캐쉬 등을 완전 비워놨으나

    여전히 https로 리다이렉트 되어버립니다 ㅠㅠ

    혹시 다른 방법이 있을까요?
  • profile ?
    웹지기님

    친절한 조언 정말 감사합니다!
  • ?
    구글에서 검색하다 우연히 글을 보게 되어 댓글을 남겨 봅니다.
    저도 현재 네이버페이 검수를 받고 있는데요.
    저 같은 경우 네이버 아이템 어쩌고 하는 php에 접근하는 경우에 대해서만 https -> http로 변경하는 것으로 담당자 분께서 연락이 오셔서 location / {} 구문 내 if문으로 해결하였네요
    xml 생성자 부분도 https 부분은 http로 변환 하였고요.

    아직 검수 중이라 똑같은 사항이 올수도 있을거 같은데
    기진곰 님의 location /example/image {} 방법이 해결이 되지 않을까 생각 됩니다.

    테스트의 경우 한번이라도 https의 경로로 접근한 경우 로컬에 인증서가 남아 있어 제대로 된 테스트가 안됩니다.
    저 같은 경우 파이어폭스로만 테스트를 하고 테스트시 매번 캐시 및 쿠키를 모두 날리고 합니다.
    그래야 제대로 테스트가 되더군요. 저도 이 테스트 때문에 한참을 헤매었습니다.

    참고로 크롬에서 하시면 로그인해둔 크롬의 상태가 초기화 됩니다. (저는 캘린더를 항상 켜 놓고 일을 하기에 로그인 풀리면 귀찮거든요 ^^)

    도움이 조금이나마 되셨으면 합니다.

    혹 다른 분들중 nginx의 스터디나 모임 같은거 아시는분 있으시면 귀뜸좀 부탁 드립니다 T.T
    독학이란건 지독하게 힘들고 외로운 일이거든요
  • ?
    저는 영카트5 사용 합니다.