웹서버구축에서 명령어로 설정할 수 있는 부분은 무엇인가요?

_____
자주 묻는 질문(FAQ) – “웹서버 구축에서 명령어로 설정할 수 있는 부분”

Q1: 웹서버 서비스의 시작·중지·재시작은 어떻게 하나요?
A1:
- systemd 기반 배포판(예: CentOS7+/Ubuntu 16.04+)
• 시작: `sudo systemctl start httpd` 또는 `sudo systemctl start apache2`
• 중지: `sudo systemctl stop httpd` 또는 `sudo systemctl stop apache2`
• 재시작: `sudo systemctl restart httpd` 또는 `sudo systemctl restart apache2`
• 상태확인: `sudo systemctl status httpd`

- SysV init 기반(구버전 CentOS/Ubuntu)
• 시작: `sudo service httpd start`
• 중지: `sudo service httpd stop`
• 재시작: `sudo service httpd restart`

Q2: 가상호스트(VirtualHost)는 어떻게 추가·활성화하나요?
A2:
1. 설정파일 작성(예: `/etc/apache2/sites-available/example.com.conf`)
• DocumentRoot, ServerName,
2. 활성화 및 서비스 재시작
• `sudo a2ensite example.com.conf`
• `sudo systemctl reload apache2`

CentOS(httpd)에서는 별도 `a2ensite` 없이 직접 conf를 `/etc/httpd/conf.d/`에 복사·수정 후 `sudo systemctl reload httpd`.

Q3: 모듈(Module) 활성화·비활성화는?
A3:
- Ubuntu/Debian:
• 활성화: `sudo a2enmod ssl`
• 비활성화: `sudo a2dismod ssl`
• 변경 반영: `sudo systemctl restart apache2`

- CentOS:
• 직접 `LoadModule ssl_module modules/mod_ssl.so` 주석 해제 또는 주석 처리
• `sudo systemctl restart httpd`

Q4: SSL/TLS 인증서 설정은 어떻게 하나요?
A4:
1. 개인키 및 CSR 생성
• `sudo openssl genrsa -out example.com.key 2048`
• `sudo openssl req -new -key example.com.key -out example.com.csr`
2. 인증서 설치
• 발급 받은 `example.com.crt`와 `example.com.key`를 `/etc/ssl/` 등에 복사
3. Apache SSL 모듈 및 설정
• `sudo a2enmod ssl`
• `/etc/apache2/sites-available/default-ssl.conf` 또는 커스텀 SSL vhost 편집
– SSLCertificateFile /etc/ssl/example.com.crt
– SSLCertificateKeyFile /etc/ssl/example.com.key
• `sudo a2ensite default-ssl`
• `sudo systemctl reload apache2`

Q5: 리스닝 포트 변경 및 방화벽 설정은?
A5:
1. Apache 포트 설정
• `/etc/apache2/ports.conf` 또는 `/etc/httpd/conf/httpd.conf`에서 `Listen 8080` 등으로 수정
2. 방화벽 허용
• UFW: `sudo ufw allow 8080/tcp`
• firewalld: `sudo firewall-cmd --add-port=8080/tcp --permanent && sudo firewall-cmd --reload`
• iptables: `sudo iptables -I INPUT -p tcp --dport 8080 -j ACCEPT`

Q6: 문서 루트(DocumentRoot)·로그 경로 변경은?
A6:
- 설정파일(예: `/etc/apache2/sites-available/000-default.conf`)에서
• DocumentRoot /var/www/html → /srv/www/example
• ErrorLog /var/log/apache2/error.log → /var/log/apache2/example-error.log
• CustomLog /var/log/apache2/access.log combined → /var/log/apache2/example-access.log
- 변경 후 `sudo systemctl reload apache2`

Q7: 파일·디렉터리 권한 및 소유권 설정은?
A7:
- 소유권 변경: `sudo chown -R www-data:www-data /var/www/html` (Ubuntu 기준)
- 권한 변경: `sudo chmod -R 755 /var/www/html`
- SELinux 활성 시:
• `sudo chcon -R -t httpd_sys_content_t /var/www/html`

Q8: 리버스 프록시·프록시 패스 설정은?
A8:
1. 모듈 활성화: `sudo a2enmod proxy proxy_http`
2. VirtualHost 내 설정 예시

ServerName proxy.example.com
ProxyPreserveHost On
ProxyPass / http://backend.local:8080/
ProxyPassReverse / http://backend.local:8080/

3. 재시작: `sudo systemctl reload apache2`

Q9: 캐시(Cache)·압축 설정은 어떻게 하나요?
A9:
- 모듈 활성화: `sudo a2enmod expires headers deflate`
- 예시 설정(가상호스트 또는 메인 conf에 추가)

ExpiresActive On
ExpiresByType text/css “access plus 1 week”
ExpiresByType application/javascript “access plus 1 week”


AddOutputFilterByType DEFLATE text/html text/plain text/css application/javascript

- `sudo systemctl reload apache2`

Q10: PHP·FastCGI 연동 설정은?
A10:
- PHP 모듈 방식:
• Ubuntu: `sudo apt install libapache2-mod-php7.4` → `sudo a2enmod php7.4` → `sudo systemctl restart apache2`
- PHP-FPM(FastCGI) 방식:
• `sudo apt install php7.4-fpm` → `sudo a2enmod proxy_fcgi setenvif`
• 가상호스트에

SetHandler “proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost/”

• `sudo systemctl reload apache2`

Q11: 보안 헤더(HTTP Security Headers)는?
A11:
- 모듈 활성화: `sudo a2enmod headers`
- 예시 설정(가상호스트 또는 메인 conf에 추가)
Header always set X-Frame-Options “SAMEORIGIN”
Header always set X-Content-Type-Options “nosniff”
Header always set Referrer-Policy “no-referrer-when-downgrade”
- 적용: `sudo systemctl reload apache2`

Q12: 접속 로그·에러 로그 레벨 조정은 어떻게 하나요?
A12:
- 메인 설정파일(`/etc/apache2/apache2.conf` 또는 `/etc/httpd/conf/httpd.conf`)에서
• LogLevel warn (info, debug, error 등으로 변경 가능)
- 가상호스트별 LogLevel 지정 가능
- 변경 후: `sudo systemctl reload apache2`

위 명령어들을 통해 웹서버의 핵심 설정(포트·vhost·모듈·SSL·캐시·보안·로그·권한 등)을 CLI로 모두 제어할 수 있습니다.
웹서버를 구축할 때 단순히 설정 파일을 수작업으로 편집하는 것 외에도 수많은 명령어를 통해 설치부터 서비스 제어, 모듈 활성화, 보안·성능 튜닝에 이르기까지 다양한 구성을 자동화하거나 즉시 적용할 수 있습니다.

아래에 주요 영역별로 어떤 명령어와 옵션을 쓰는지를 자세히 설명합니다.

1. 패키지 설치 및 서비스 관리 리눅스 배포판에 따라 `apt`, `yum`, `dnf` 같은 패키지 관리 명령어를 통해 Apache(httpd)나 Nginx를 설치합니다.

예를 들어 Ubuntu 계열에서는 `sudo apt update` `sudo apt install apache2` (또는 `nginx`) 를 사용하고, CentOS/RHEL 계열에서는 `sudo yum install httpd` 또는 `sudo dnf install nginx` 와 같이 설치합니다.

설치가 끝나면 systemd 기반 시스템에서는 `sudo systemctl start httpd` (또는 `nginx`) `sudo systemctl enable httpd` `sudo systemctl status httpd` 등으로 서비스를 실행·자동시작 등록·상태 확인을 합니다.

SysV init 환경에서는 `service httpd start`, `chkconfig httpd on` 등을 사용합니다.



2. 가상호스트 및 포트 설정 Apache에서는 `a2ensite`, `a2dissite` 명령을 통해 가상호스트(enabled site)를 간단히 활성·비활성화합니다.

예를 들어 `sudo a2ensite example.com.conf` `sudo systemctl reload apache2` Nginx의 경우엔 별도의 enable/disable 스크립트가 없지만, `/etc/nginx/sites-available`와 `/etc/nginx/sites-enabled`를 직접 심볼릭 링크로 관리하며 `sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/` `sudo nginx -t` `sudo systemctl reload nginx` 명령으로 즉시 반영합니다.

포트 변경은 설정 파일 수정 후 `-t` 옵션을 통해 문법검사, `reload`로 재시작 없이 적용합니다.



3. 모듈·기능 활성화 및 비활성화 Apache 모듈은 `a2enmod`, `a2dismod`로, Nginx의 경우 컴파일 시점 모듈을 제외하면 동적 로드가 제한적이므로 대부분 설정 파일(`load_module`)에 직접 경로를 지정합니다.

예를 들어 `sudo a2enmod rewrite` `sudo systemctl restart apache2` 처럼 URL 재작성 기능을 켤 수 있고, 필요 없는 모듈은 비활성화하여 메모리 점유를 줄일 수 있습니다.



4. SSL/TLS 인증서 발급 및 적용 자체 서명(Self-Signed) 인증서는 OpenSSL 명령어 한 줄로 생성합니다.

`openssl req -newkey rsa:2048 -nodes -keyout example.key -x509 -days 365 -out example.crt` Let's Encrypt 등 공인 인증서는 Certbot을 사용하여 `sudo certbot --apache -d example.com` `sudo certbot --nginx -d example.com` 과 같이 설치·자동 갱신 스크립트를 등록하게 됩니다.

발급 후 웹서버 설정 파일에서 `SSLCertificateFile`, `SSLCertificateKeyFile` 등을 명령어 없이 바로 참조하게 설정한 뒤에도 `reload` 명령만으로 증명서를 즉시 적용할 수 있습니다.



5. 보안·권한 설정 웹루트 디렉토리의 소유자와 권한은 `chown`, `chmod`로 관리합니다.

`sudo chown -R www-data:www-data /var/www/html` `sudo chmod -R 755 /var/www/html` SELinux가 활성화된 시스템에서는 `semanage fcontext`, `restorecon` 명령으로 웹서버가 읽고 쓸 수 있는 컨텍스트를 지정합니다.

`sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html(/.*)?"` `sudo restorecon -Rv /var/www/html` 방화벽도 `ufw`나 `firewall-cmd`로 HTTP(80)/HTTPS(44

3) 포트를 허용합니다.

`sudo ufw allow 'Apache Full'` 또는 `sudo firewall-cmd --permanent --add-service=http` `sudo firewall-cmd --reload`

6. 성능 튜닝 동시 접속 처리량을 늘리기 위해 Apache에서는 `mpm_prefork`, `mpm_event` 등의 MPM 설정을, Nginx에서는 `worker_processes`, `worker_connections` 설정을 조정합니다.

이 값을 즉시 변경하려면 설정 파일 편집 후 `reload` 하면 되고, 커널 매개변수를 건드릴 때는 `sysctl`을 사용합니다.

`sudo sysctl -w net.core.somaxconn=65535` `sudo sysctl -w fs.file-max=200000` 파일 디스크립터 한도는 `ulimit -n 100000` 명령으로 세션 단위로 높일 수 있으며, 영구 적용은 `/etc/security/limits.conf`에 추가합니다.



7. 로깅·모니터링 실시간 로그 확인은 `tail -f /var/log/apache2/access.log` 또는 `journalctl -u nginx -f` 같은 명령을 사용합니다.

로그 파일이 커지면 `logrotate` 설정에 맞춰 `logrotate /etc/logrotate.d/nginx`를 수동 실행해 로그를 순환시킬 수 있습니다.

추가로 `netstat` 혹은 `ss` 명령으로 현재 열려 있는 소켓과 연결 상태를, `top`·`htop`으로 CPU·메모리 사용 현황을 점검해 장애 원인을 분석합니다.



8. PHP-FPM, 프록시, 캐싱, 로드밸런싱 PHP-FPM 프로세스 구성을 바꾸려면 `/etc/php/…/fpm/pool.d/*.conf` 파일을 수정하거나 `php-fpm` 서비스 재시작 전 `php-fpm -t`로 문법 검사 후 `systemctl reload php-fpm`을 합니다.

Nginx를 리버스 프록시나 로드밸런서로 활용할 때는 `upstream` 블록을 CLI 편집 후 `nginx -t && systemctl reload nginx`로 반영하며, 캐싱 설정(`proxy_cache_path`)도 같은 방식으로 빠르게 활성화·비활성화합니다.

이처럼 웹서버 구축 과정에서 필요한 거의 모든 설정을 터미널 명령어 한 줄로 설치, 활성화, 변경, 재시작, 검증, 보안·성능 튜닝에 이르기까지 처리할 수 있습니다.

숙련된 자동화 스크립트(Ansible, Chef, Puppet)나 셸 스크립트를 작성하면 이 명령들을 모듈화하여 더욱 일관성 있고 반복 가능한 구성 관리가 가능합니다.

작성자: 박다은 [비회원] | 작성일자: 11개월 전 2025-07-22 08:02:37
조회수: 158 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.