Linux

[CentOS8] nginx 웹서버(2) - 사용자 디렉터리로 호스팅, 가상호스트, Basic Authentication

Jen'_' 2021. 5. 5. 17:12
반응형

 

이번 실습은 웹서버가 구축되어 있는 상태에서 진행되므로, 구축이 안되어 있으면 아래 포스팅부터 보세요

jenakim47.tistory.com/31

 

[CentOS8] nginx 웹서버(1) - 구축, php설정

1. nginx 설치 epel-release 인스톨 및 yum 저장소를 업데이트 해줍니다. [root@master ~]# yum install -y epel-release [root@master ~]# rpm -ivh http://rpms.remirepo.net/enterprise/remi-release8-.rpm..

jenakim47.tistory.com

 

목표

1. 사용자 홈디텍터리별 호스팅

2. 하나의 웹서버로 두개의 웹페이지를 이용하기 위한 가상호스트 설정

3. 사용자 인증 Basic Authentication

 


 

1. 사용자 홈디렉터리별 호스팅

- 호스트별로 웹페이지를 만들어서 접근하기

- centos master 에 웹서버가 구축되어 있고, user1 사용자가 있다.

- user1 디렉터리 html 파일에 접근할 것이다.

 

[root@master ~]# vi /etc/nginx/nginx.conf

설정파일 server {} 안에 아래 항목을 넣는다

location ~ ^/~(.+?)(/.*)?$ {              # http://serverip/~username
          alias /home/$1/public_html$2;   # /home/username/public_html/ 하위에 html 파일을 넣을것이다.
          index index.html index.htm;
        }

 

아래처럼 넣으면됨(친절하다 ㅎㅎ)

server {

    listen     80 default_server;

    listen     [::]:80 default_server;

    server_name www.chul.com; # 사용ip or 도메인

    root      /usr/share/nginx/html;

    # Load configuration files for the default server block.

    include /etc/nginx/default.d/*.conf;

    location / {

    }

    location ~ ^/~(.+?)(/.*)?$ {

    alias /home/$1/public_html$2;

    index index.html index.htm;

    }

 

 

[root@master ~]# setsebool -P httpd_enable_homedirs on

[root@master ~]# chmod 711 /home/user1

홈디렉터리에 접근하기 위해선 bool값 설정과 권한 설정이 필요하다.

 

[root@master ~]# su - user1

소유주 그룹주가 user1 이어야 하므로 계정을 바꿔준다

 

[user1@master ~]$ pwd

/home/user1

[user1@master ~]$ mkdir public_html

[user1@master ~]$ chmod 755 public_html/

[user1@master ~]$ vi public_html/index.html

 

<html>
<body>
<div style="width: 100%; font-size: 40px; font-weight: bold; text-align: center;">
Nginx UserDir Test Page
</div>
</body>
</html>

 

대충 이런 html 파일을 만들어 주었다.

 

192.168.111.10/~user1 을 입력하면 /home/user1/public_html/index.html 에 접근한다!

서버를 사용하는 사용자마다 사용할 수 있는 웹페이지를 만들어 놓으면 아주 좋을거 같다 ㅎㅎ

* 본인 serverip가 192.168.111.10 이고 user1 사용자가 있는거임.

 


 

2. 가상호스트

- 하나의 웹서버(192.168.111.10)에 두개의 웹페이지 사용.

- DNS서버가 있어야함. www.jeong.com 를 DNS에서 192.168.111.10 으로 변경. (vi /var/named/jeong.zon)

- window의 dns 주소를 192.168.111.10 으로 한다음 테스트. 즉, 두개의 가상 리눅스 서버와 한개의 윈도우 클라이언트가 필요.

 

- www.chul.com을 입력하면 /usr/share/nginx/html/index.html 에 접근

- www.jeong.com을 입력하면 /vhost/jeong/www/index.html 에 접근

* www.chul.com은 centos master 에서 사용하는 도메인이다.

* www.jeong.com은 centos slave 에서 사용하는 도메인이다.

 

 

[root@master ~]# vi /etc/nginx/conf.d/vhost.conf

가상호스트를 위한 새로운 웹서버 설정파일을 만든다.

아래의 내용을 넣는다.

server {
        listen          80;
        server_name     www.jeong.com;   # 가상호스트 사용 도메인 

        location / {
            root   /vhost/jeong/www;     # 하위 경로에 html 파일을 넣을 것이다.
            index  index.html index.htm;
        }
}

 

 

[root@master ~]# systemctl restart nginx

[root@master ~]# chcon -R -t httpd_sys_content_t /vhost/

디렉터리에 selinux 설정 해줘야함.

 

[root@master ~]# vi /var/named/jeong.zon

가상호스트 존파일에 www행의 ip를 웹서버(master) ip로 바꾼다.

 

www IN A 192.168.111.10

 

[root@master ~]# systemctl restart named

 

 

window client로 넘어가서 dns를 웹서버ip(192.168.111.10)으로 바꾸고,

www.chul.com과 www.jeong.com에 ip를 확인, 아래와 같이 둘다 같은 ip가 나오면 준비가 끝났다.

 

 

 

window client에서 www.chul.com 검색

/usr/share/nginx/html/index.html 에 접근 성공!

 

 

 

www.jeong.com 검색

/vhost/jeong/www/index.html 에 접근성공!

 


 

3. Basic Authentication

- 웹서버에 접근하려면 사용자 인증을 해야하는 설정을 해 볼 것이다.

 

[root@master ~]# yum -y install httpd-tools

[root@master ~]# vi /etc/nginx/nginx.conf

server {} 안에 아래 항목을 넣는다.

location /auth-basic/ {                                  # http://serverip/auth-basic 이런 경로로 들어갈것임
          auth_basic  "Basic Auth";                      # 로그인 팝업창 메시지
          auth_basic_user_file  "/etc/nginx/.htpasswd";  # 로그인시 필요한 사용자 계정과 비밀번호 정보 파일
        }

 

 

[root@master ~]# mkdir /usr/share/nginx/html/auth-basic

[root@master ~]# vi /usr/share/nginx/html/auth-basic/index.html

 

<html>
<body>
<div style="width: 100%; font-size: 40px; font-weight: bold; text-align: center;">
Basic Auth Test Page
</div>
</body>
</html>

 

디렉터리를 만들어주고 대충 이런 html 파일을 넣어준다.

 

[root@master ~]# htpasswd -c /etc/nginx/.htpasswd user1

New password:

Re-type new password:

Adding password for user user1

 

apache에서 제공하는 "htpasswd"로 아이디/패스워드 파일을 관리 할 수 있다.
아이디/패스워드를 저장 할 파일 이름을 /etc/nginx/.htpasswd로 설정하였다.
htpasswd -c 옵션을 사용하면 파일을 만들고, 계정을 생성하는 것이다.
파일을 생성한 다음부터는 -c 옵션을 빼고 htpasswd 명령어를 사용하여 사용자를 추가할 수 있다.

 

 

[root@master ~]# cat /etc/nginx/.htpasswd

user1:$apr1$JBwuz9zL$jzQG/a5C1jA.HsDX3E0GA/

파일을 확인해 보면 user1 사용자와 패스워드가 확인된다.

 

[root@master ~]# systemctl restart nginx

설정파일을 추가했으니 재시작

 

 

http://www.chul.com(or ip)/auth-basic 을 검색하니 인증 창이 뜬다!

 

 

 

 

반응형