안녕하세요,
현재 우분투 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; } }
1. 정규식 없이 location / 이렇게 폴더 단위로 직접 선언한 것은 정규식을 사용해서 location ~* 문법으로 선언한 것보다 항상 우선순위를 가집니다. 꼭 모든 이미지 파일에 적용할 필요는 없고 첨부한 이미지 파일에만 적용해도 된다면 location /files/attach/images 이렇게 정규식을 사용하지 않도록 선언해 보세요. (location / 보다 나중에)
2. 예전에 해당 주소를 한 번이라도 301 리다이렉트한 적이 있다면 브라우저에서 리다이렉트를 기억하고 있기 때문에 서버 설정을 어떻게 바꾸든 적용되지 않고 무조건 리다이렉트됩니다. expires가 없는 301 리다이렉트는 사실상 영원히 캐싱됩니다. 매우 위험한 설정이죠. 브라우저 캐시부터 비워보세요.
그런데 이미지가 https로 로딩되면 뭔가 문제가 있나요? 반대의 경우라면 보안 경고가 나올 수도 있겠지만, https라서 문제가 생길 일은 없을 것 같은데요. nginx에서 정적 파일을 처리하는 데 눈에 띄는 부하가 발생하는 것도 아니고, https에는 http2가 적용되니 속도도 오히려 더 빠를 텐데...