1. 권한 설정 및 접근 제어
- .htaccess 파일을 사용하여 특정 디렉토리나 파일에 대한 접근을 제한한다.
- 이를 통해서 보안을 강화할 수 있다.
예시 : 특정 ip만 접근 허용
# 모든 사용자에게 접근을 차단하고 특정 ip만 허용한다.
Order Deny, Allow
Deny from all
Allow from 123.456.789.000
ㄴ 모든 ip 주소의 접근을 차단하고, 지정된 ip 주소 (123....) 만 해당 디렉토리에 접근할 수 있도록 설정한다.
ㄴ 이를 통해서 특정 관리자나 팀만 특정 리소스에 접근할 수 있게 할 수 있다.
예시 : 기본 인증 설정
# 이 디렉토리에 접근하기 전에 사용자 인증을 요구
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /path/to/.htpasswd
Require valid-user
ㄴ 위 코드는 접근할 때 사용자 이름과 비밀번호를 요구하는 기본인증을 설정한다.
ㄴ AuthUserFile 경로에 있는 .htpasswd 파일에 저장된 사용자 자격증명으로 인증을 처리한다.
ㄴ 이 방식은 비밀번호로 특정 콘텐츠에 대한 접근을 제한할 때 사용한다.
2. URL 재작성
- URL을 보다 간결하고 읽기 쉽게 만들어나 리다이렉션할 때 .htaccess의 mod_rewrite 기능을 사용한다.
예시 : 간단한 URL 재작성
RewriteEngine On
RewriteRule ^about-us$ about.html [L]
ㄴ 사용자가 /about-us로 요청하면 실제 파일인 about.html을 로드하게 한다.
ㄴ 더 짧고 직관적인 URL을 제공하여 SEO에 도움이 된다.
예시 : http에서 https로 리다이렉션
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRult ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R = 301]
ㄴ 위 코드는 모든 HTTP 요청을 HTTPS로 리다이렉션한다.
ㄴ 이를 통해서 보안이 필요한 페이지에 SSL 암호화된 연결을 강제할 수 있다.
ㄴ 사용자는 URL에 직접 HTTPS를 입력하지 않더라도 안전하게 접속할 수 있다.
3. 디렉토리 인덕스 설정
- 디렉토리 내에 index.html이나 index.php와 같은 파일이 없을 때 브라우저에서 해당 디렉토리의 파일 목록이 표시될 수 있다.
- 이를 방지하려면 디렉토리 인덱싱을 비활성화할 수 있다.
예시 : 디렉토리 인덱스 비활성화
Options -Indexes
ㄴ 이 설정은 해당 디렉토리의 파일 목록을 비활성화한다.
ㄴ 보안적으로 중요하며, 서버의 중요한 파일들이 노출되지 않도록 할 수 있다.
예시 : 인덱스 파일 지정
DirectoryIndex index.html
ㄴ 디렉토리로 접근할 때 기본적으로 index.html 파일을 불러오도록 설정한다.
ㄴ 만약에 index.html파일이 없으면 서버는 다른 기본 파일을 찾지 않는다.
4. SSL 강제적용
- SSL은 웹사이트의 보안에 중요한 요소이다.
- .htaccess 파일을 통해 http로 접속하는 사용자를 자동으로 https로 리다이렉트 한다.
예시 : HTTPS 강제적용
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R = 301]
ㄴ HTTP로 요청이 들어왔을 때 자동으로 HTTPS로 리다이렉트 한다.
ㄴ 사용자의 데이터를 암호화하여 더 안전하게 전송할 수 있도록 한다.
5. 캐시 관리
- 웹 브라우저에 데이터를 캐시하는 설정을 통해서 페이지 로딩 속도를 높이고, 서버의 부하를 줄인다.
- 캐시 : 브라우저가 웹 리소스를 일정 기간동안 저장하여, 다시 다운로드할 필요 없이 로컬에서 불러오는 기능
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType text/css "access plus 1 week"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType text/x-javascript "access plus 1 week"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresDefault "access plus 2 days"
</IfModule>
ㄴ 특정 파일 유형에 대해 캐시 만료 시간을 지정한다.
ㄴ 이를 통해 사용자는 같은 파일을 로드할 때 시간을 절약하고, 서버는 부하가 줄어서 좋다.