리눅스 lampp 에서 phpmyadmin 접속하려고 하니 권한 에러가 발생하여 아래와 같이 수정했습니다.

 

root@lampp:/opt/lampp# nano /opt/lampp/etc/extra/httpd-xampp.conf

 

# since XAMPP 1.4.3
<Directory "/opt/lampp/phpmyadmin">
#    AllowOverride AuthConfig Limit
#    Require local
#    ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
  AllowOverride AuthConfig Limit
  Order allow,deny
  Allow from all
  Require all granted

아래와 같이 수정하시면 됩니다~

 

 

 

출처 : https://gist.github.com/dhavalv/744b1cf996f3990615e85083f84ac56b

 

How to access PhpMyadmin on xampp in linux (Ubuntu)via IP Address?

How to access PhpMyadmin on xampp in linux (Ubuntu)via IP Address? - httpd-xampp-help.md

gist.github.com

httpd.conf 파일에 Indexes 를 지우거나 - 를 앞에 붙이면 됩니다~

 

    Options -Indexes FollowSymLinks

 

 

/opt/lampp/etc/extra/httpd-default.conf 

 

ServerTokens Prod

ServerSignature Off

 

 

 

 I just access to \xampp\apache\conf\extra\httpd-default.conf to set "ServerTokens Prod" and "ServerSignature Off". 

https://stackoverflow.com/questions/21399664/how-to-hide-xampp-apache-version-number

 

how to hide xampp apache version number

I am using xampp(1.8.1) apache server. I would like to hide my Apache Version info when user got 404 pages. I did some research and I know that I should add following two directives in configuratio...

stackoverflow.com

 

mysql 이 위치한 디렉토리로 이동

저의 경우 : /opt/lampp/bin/mysql 

 

mysql -u root -p

<처음 root 암호가 없으므로 그냥 엔터>

use mysql;
update user set password=password('원하는신규비번') where user='root';
flush privileges;

 

아래와 같이 입력하면 root user에 접속하는 3개의 조건별로 동일한 비밀번호가 설정된것을 확인할 수 있습니다.

 

use mysql;

select host, user, password from user;

+-----------+------+-------------------------------------------+

| host      | user | password                                  |

+-----------+------+-------------------------------------------+

| localhost | root | *1EBA3FCB04BBE7C3C2A7934FAA99C4D00 |

| 127.0.0.1 | root | *1EBA3FCB04BBE7C3C2A7934FAA99C4D00 |

| ::1       | root | *1EBA3FCB04BBE7C3C2A7934FAA99C4D00 |

| localhost |      |                                           |

| localhost | pma  |                                           |

+-----------+------+-------------------------------------------+

 

mysql 은 root user는 하나이지만 접속하는 host가 localhost, 127.0.0.1,::1 등 host 에 따라 비밀번호를 다르게 설정가능한것으로 보입니다.

https://stackoverflow.com/questions/51378701/not-able-to-install-php7-0-in-ubuntu18-04-lts


sudo add-apt-repository ppa:ondrej/php

위 저장소를 추가한 후 apt install php7.0 하였습니다!


만약 5.6을 설치하고 한다면..



sudo add-apt-repository -y ppa:ondrej/php
sudo apt update
sudo apt install php5.6

https://askubuntu.com/questions/1048581/install-php5-on-ubuntu-18-04

How To Install Linux, Nginx, MySQL, PHP (LEMP stack) in Ubuntu 16.04

PostedApril 21, 2016 285.4kviews LEMP MYSQL PHP NGINX UBUNTU UBUNTU 16.04

Introduction

The LEMP software stack is a group of software that can be used to serve dynamic web pages and web applications. This is an acronym that describes a Linux operating system, with an Nginx web server. The backend data is stored in the MySQL database and the dynamic processing is handled by PHP.

In this guide, we will demonstrate how to install a LEMP stack on an Ubuntu 16.04 server. The Ubuntu operating system takes care of the first requirement. We will describe how to get the rest of the components up and running.

Prerequisites

Before you complete this tutorial, you should have a regular, non-root user account on your server with sudo privileges. You can learn how to set up this type of account by completing our Ubuntu 16.04 initial server setup.

Once you have your user available, sign into your server with that username. You are now ready to begin the steps outlined in this guide.

Step 1: Install the Nginx Web Server

In order to display web pages to our site visitors, we are going to employ Nginx, a modern, efficient web server.

All of the software we will be using for this procedure will come directly from Ubuntu's default package repositories. This means we can use the apt package management suite to complete the installation.

Since this is our first time using apt for this session, we should start off by updating our local package index. We can then install the server:

  • sudo apt-get update
  • sudo apt-get install nginx

On Ubuntu 16.04, Nginx is configured to start running upon installation.

If you are have the ufw firewall running, as outlined in our initial setup guide, you will need to allow connections to Nginx. Nginx registers itself with ufw upon installation, so the procedure is rather straight forward.

It is recommended that you enable the most restrictive profile that will still allow the traffic you want. Since we haven't configured SSL for our server yet, in this guide, we will only need to allow traffic on port 80.

You can enable this by typing:

  • sudo ufw allow 'Nginx HTTP'

You can verify the change by typing:

  • sudo ufw status

You should see HTTP traffic allowed in the displayed output:

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

With the new firewall rule added, you can test if the server is up and running by accessing your server's domain name or public IP address in your web browser.

If you do not have a domain name pointed at your server and you do not know your server's public IP address, you can find it by typing one of the following into your terminal:

  • ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

This will print out a few IP addresses. You can try each of them in turn in your web browser.

As an alternative, you can check which IP address is accessible as viewed from other locations on the internet:

  • curl -4 icanhazip.com

Type one of the addresses that you receive in your web browser. It should take you to Nginx's default landing page:

http://server_domain_or_IP

Nginx default page

If you see the above page, you have successfully installed Nginx.

Step 2: Install MySQL to Manage Site Data

Now that we have a web server, we need to install MySQL, a database management system, to store and manage the data for our site.

You can install this easily by typing:

  • sudo apt-get install mysql-server

You will be asked to supply a root (administrative) password for use within the MySQL system.

The MySQL database software is now installed, but its configuration is not exactly complete yet.

To secure the installation, we can run a simple security script that will ask whether we want to modify some insecure defaults. Begin the script by typing:

  • sudo mysql_secure_installation

You will be asked to enter the password you set for the MySQL root account. Next, you will be asked if you want to configure the VALIDATE PASSWORD PLUGIN.

Warning: Enabling this feature is something of a judgment call. If enabled, passwords which don't match the specified criteria will be rejected by MySQL with an error. This will cause issues if you use a weak password in conjunction with software which automatically configures MySQL user credentials, such as the Ubuntu packages for phpMyAdmin. It is safe to leave validation disabled, but you should always use strong, unique passwords for database credentials.

Answer y for yes, or anything else to continue without enabling.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:

If you've enabled validation, you'll be asked to select a level of password validation. Keep in mind that if you enter 2, for the strongest level, you will receive errors when attempting to set any password which does not contain numbers, upper and lowercase letters, and special characters, or which is based on common dictionary words.

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

If you enabled password validation, you'll be shown a password strength for the existing root password, and asked you if you want to change that password. If you are happy with your current password, enter n for "no" at the prompt:

Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : n

For the rest of the questions, you should press Y and hit the Enter key at each prompt. This will remove some anonymous users and the test database, disable remote root logins, and load these new rules so that MySQL immediately respects the changes we have made.

At this point, your database system is now set up and we can move on.

Step 3: Install PHP for Processing

We now have Nginx installed to serve our pages and MySQL installed to store and manage our data. However, we still don't have anything that can generate dynamic content. We can use PHP for this.

Since Nginx does not contain native PHP processing like some other web servers, we will need to install php-fpm, which stands for "fastCGI process manager". We will tell Nginx to pass PHP requests to this software for processing.

We can install this module and will also grab an additional helper package that will allow PHP to communicate with our database backend. The installation will pull in the necessary PHP core files. Do this by typing:

  • sudo apt-get install php-fpm php-mysql

Configure the PHP Processor

We now have our PHP components installed, but we need to make a slight configuration change to make our setup more secure.

Open the main php-fpm configuration file with root privileges:

  • sudo nano /etc/php/7.0/fpm/php.ini

What we are looking for in this file is the parameter that sets cgi.fix_pathinfo. This will be commented out with a semi-colon (;) and set to "1" by default.

This is an extremely insecure setting because it tells PHP to attempt to execute the closest file it can find if the requested PHP file cannot be found. This basically would allow users to craft PHP requests in a way that would allow them to execute scripts that they shouldn't be allowed to execute.

We will change both of these conditions by uncommenting the line and setting it to "0" like this:

/etc/php/7.0/fpm/php.ini
cgi.fix_pathinfo=0

Save and close the file when you are finished.

Now, we just need to restart our PHP processor by typing:

  • sudo systemctl restart php7.0-fpm

This will implement the change that we made.

Step 4: Configure Nginx to Use the PHP Processor

Now, we have all of the required components installed. The only configuration change we still need is to tell Nginx to use our PHP processor for dynamic content.

We do this on the server block level (server blocks are similar to Apache's virtual hosts). Open the default Nginx server block configuration file by typing:

  • sudo nano /etc/nginx/sites-available/default

Currently, with the comments removed, the Nginx default server block file looks like this:

/etc/nginx/sites-available/default
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;

    server_name _;

    location / {
        try_files $uri $uri/ =404;
    }
}

We need to make some changes to this file for our site.

  • First, we need to add index.php as the first value of our index directive so that files named index.php are served, if available, when a directory is requested.
  • We can modify the server_name directive to point to our server's domain name or public IP address.
  • For the actual PHP processing, we just need to uncomment a segment of the file that handles PHP requests. This will be the location ~\.php$ location block, the included fastcgi-php.conf snippet, and the socket associated with php-fpm.
  • We will also uncomment the location block dealing with .htaccess files. Nginx doesn't process these files. If any of these files happen to find their way into the document root, they should not be served to visitors.

The changes that you need to make are in red in the text below:

/etc/nginx/sites-available/default
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index index.php index.html index.htm index.nginx-debian.html;

    server_name server_domain_or_IP;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

When you've made the above changes, you can save and close the file.

Test your configuration file for syntax errors by typing:

  • sudo nginx -t

If any errors are reported, go back and recheck your file before continuing.

When you are ready, reload Nginx to make the necessary changes:

  • sudo systemctl reload nginx

Step 5: Create a PHP File to Test Configuration

Your LEMP stack should now be completely set up. We can test it to validate that Nginx can correctly hand .php files off to our PHP processor.

We can do this by creating a test PHP file in our document root. Open a new file called info.php within your document root in your text editor:

  • sudo nano /var/www/html/info.php

Type or paste the following lines into the new file. This is valid PHP code that will return information about our server:

/var/www/html/info.php
<?php
phpinfo();

When you are finished, save and close the file.

Now, you can visit this page in your web browser by visiting your server's domain name or public IP address followed by /info.php:

http://server_domain_or_IP/info.php

You should see a web page that has been generated by PHP with information about your server:

PHP page info

If you see a page that looks like this, you've set up PHP processing with Nginx successfully.

After verifying that Nginx renders the page correctly, it's best to remove the file you created as it can actually give unauthorized users some hints about your configuration that may help them try to break in. You can always regenerate this file if you need it later.

For now, remove the file by typing:

  • sudo rm /var/www/html/info.php

Conclusion

You should now have a LEMP stack configured on your Ubuntu 16.04 server. This gives you a very flexible foundation for serving web content to your visitors.




https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-in-ubuntu-16-04

출처 : http://httpd.apache.org/docs/trunk/ko/vhosts/examples.html



IP 주소 한개에 여러 이름기반 웹사이트 운영하기.

서버에 IP 주소가 한개 있고, DNS에서 여러 주소(CNAMES)가 이 컴퓨터를 가리킨다. 이 컴퓨터에서 www.example.com과 www.example.org의 웹서버를 실행하고 싶다.

Note

아파치 서버에 가상호스트 설정을 한다고 그 호스트명에 대한 DNS 항목이 자동이로 생성되지 않는다. 반드시 DNS에 IP 주소를 가리키는 이름이 있어야 한다. 안그러면 아무도 웹사이트를 볼 수 없다. 검사해보기 위해 hosts 파일에 항목을 추가할 수 있지만, 이는 hosts 항목을 가진 컴퓨터에만 반영된다.

서버 설정

# 아파치가 포트 80을 기다린다
Listen 80

# 모든 IP 주소에서 가상호스트 요청을 기다린다
NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot /www/example1
ServerName www.example.com

# 다른 지시어들도 있다

</VirtualHost>

<VirtualHost *:80>
DocumentRoot /www/example2
ServerName www.example.org

# 다른 지시어들도 있다

</VirtualHost>

별표는 모든 주소를 가리키므로, 주서버는 어떤 요청도 서비스하지 않는다. www.example.com이 설정파일에 처음으로 나오므로 가장 높은 우선순위를 가지며, 기본혹은 초기 서버가 된다. 어떤 ServerName 지시어에도 해당되지않는 요청은 첫번째 VirtualHost가 서비스한다.

주의

원한다면 * 대신 시스템의 실제 IP 주소를 사용할 수 있다. 이 경우 VirtualHost의 아규먼트는 NameVirtualHost의 아규먼트와 일치해야 한다:

NameVirtualHost 172.20.30.40

<VirtualHost 172.20.30.40>
# 생략 ...

그러나 ISP에서 동적으로 IP 주소를 가져오는 등 IP 주소를 모르는 경우에는 *를 사용하는 것이 유용하다. *는 모든 IP 주소에 해당하므로, IP 주소가 변경되어도 설정을 변경할 필요가 없다.

거의 대부분의 이름기반 가상호스트 설정은 위와 같다. 예외는 다른 IP 주소나 포트로 다른 내용을 서비스하려는 경우이다.

top

여러 IP 주소에서 이름기반 호스트.

주의

여기서 설명한 방법은 IP 주소가 몇개라도 적용가능하다.

서버는 IP 주소가 두개있다. 하나에서 (172.20.30.40) "주" 서버 server.domain.com을 서비스하고, 다른 하나에서 (172.20.30.50) 여러 가상호스트를 서비스할 것이다.

서버 설정

Listen 80

# 172.20.30.40에서 실행하는 "주"서버이다
ServerName server.domain.com
DocumentRoot /www/mainserver

# 다른 주소다
NameVirtualHost 172.20.30.50

<VirtualHost 172.20.30.50>
DocumentRoot /www/example1
ServerName www.example.com

# 다른 지시어들도 있다 ...

</VirtualHost>

<VirtualHost 172.20.30.50>
DocumentRoot /www/example2
ServerName www.example.org

# 다른 지시어들도 있다 ...

</VirtualHost>

172.20.30.50이 아닌 주소에 대한 요청은 주서버가 서비스한다. 호스트명 없이, 즉 Host: 헤더없이 172.20.30.50로 요청하면 www.example.com이 서비스한다.

top

(내부와 외부 주소와 같이) 다른 IP 주소로 같은 내용을 서비스하기.

서버 컴퓨터에 IP 주소가 두개 (192.168.1.1과 172.20.30.40) 있다. 컴퓨터는 내부 (인트라넷) 네트웍과 외부 (인터넷) 네트웍 사이에 위치한다. 네트웍 밖에서server.example.com은 외부 주소를 (172.20.30.40) 의미하고, 네트웍 내부에서 같은 이름을 내부 주소로 (192.168.1.1) 사용한다.

서버는 VirtualHost 섹션 한개로 내부와 외부 응답에 같은 내용을 서비스할 수 있다.

서버 설정

NameVirtualHost 192.168.1.1
NameVirtualHost 172.20.30.40

<VirtualHost 192.168.1.1 172.20.30.40>
DocumentRoot /www/server1
ServerName server.example.com
ServerAlias server
</VirtualHost>

이제 두 네트웍에서 들어온 요청을 같은 VirtualHost에서 서비스한다.

주의:

내부 네트웍에서는 완전한 호스트명 server.example.com 대신 이름 server도 가능하다.

또한 위의 예에서 IP 주소 대신 *을 사용하여 서버가 모든 주소에 동일하게 동작할 수 있다.

top

여러 포트에서 서로 다른 사이트 운영하기.

같은 IP의 여러 포트에서 서로 다른 도메인을 서비스한다고 가정하자. 이는 "NameVirtualHost" 태그에 포트를 정의하면 가능하다. NameVirtualHost name:port없이 <VirtualHost name:port>만 혹은 Listen 지시어만 사용하면 안된다.

서버 설정

Listen 80
Listen 8080

NameVirtualHost 172.20.30.40:80
NameVirtualHost 172.20.30.40:8080

<VirtualHost 172.20.30.40:80>
ServerName www.example.com
DocumentRoot /www/domain-80
</VirtualHost>

<VirtualHost 172.20.30.40:8080>
ServerName www.example.com
DocumentRoot /www/domain-8080
</VirtualHost>

<VirtualHost 172.20.30.40:80>
ServerName www.example.org
DocumentRoot /www/otherdomain-80
</VirtualHost>

<VirtualHost 172.20.30.40:8080>
ServerName www.example.org
DocumentRoot /www/otherdomain-8080
</VirtualHost>

top

IP기반 가상호스트

서버는 각각 www.example.com과 www.example.org에 해당하는 두 IP 주소를 (172.20.30.40과 172.20.30.50) 가진다.

서버 설정

Listen 80

<VirtualHost 172.20.30.40>
DocumentRoot /www/example1
ServerName www.example.com
</VirtualHost>

<VirtualHost 172.20.30.50>
DocumentRoot /www/example2
ServerName www.example.org
</VirtualHost>

<VirtualHost> 지시어로 지정한 주소에 해당하지않는 주소로 (예를 들어, localhost) 요청이 들어오면 주서버가 있는 경우 주서버가 서비스한다.

top

포트기반과 ip기반이 혼합된 가상호스트

서버는 각각 www.example.com과 www.example.org에 해당하는 두 IP 주소를 (172.20.30.40과 172.20.30.50) 가진다. 각 IP의 80번과 8080번 포트에 가상호스트를 돌린다.

서버 설정

Listen 172.20.30.40:80
Listen 172.20.30.40:8080
Listen 172.20.30.50:80
Listen 172.20.30.50:8080

<VirtualHost 172.20.30.40:80>
DocumentRoot /www/example1-80
ServerName www.example.com
</VirtualHost>

<VirtualHost 172.20.30.40:8080>
DocumentRoot /www/example1-8080
ServerName www.example.com
</VirtualHost>

<VirtualHost 172.20.30.50:80>
DocumentRoot /www/example2-80
ServerName www.example.org
</VirtualHost>

<VirtualHost 172.20.30.50:8080>
DocumentRoot /www/example2-8080
ServerName www.example.org
</VirtualHost>

top

이름기반과 IP기반이 혼합된 가상호스트

주소중 몇몇은 이름기반 가상호스트로, 다른 것은 IP기반 가상호스트로 서비스하고 싶다.

서버 설정

Listen 80

NameVirtualHost 172.20.30.40

<VirtualHost 172.20.30.40>
DocumentRoot /www/example1
ServerName www.example.com
</VirtualHost>

<VirtualHost 172.20.30.40>
DocumentRoot /www/example2
ServerName www.example.org
</VirtualHost>

<VirtualHost 172.20.30.40>
DocumentRoot /www/example3
ServerName www.example3.net
</VirtualHost>

# IP-기반
<VirtualHost 172.20.30.50>
DocumentRoot /www/example4
ServerName www.example4.edu
</VirtualHost>

<VirtualHost 172.20.30.60>
DocumentRoot /www/example5
ServerName www.example5.gov
</VirtualHost>

top

_default_ 가상호스트 사용하기

모든 포트에 대한 _default_ 가상호스트

어떤 가상호스트에도 해당하지않은 IP 주소와 포트에 대한 모든 요청을 처리하기.

서버 설정

<VirtualHost _default_:*>
DocumentRoot /www/default
</VirtualHost>

default(기본) 가상호스트의 포트로 와일드카드를 사용하여 어떤 요청도 주서버로 못가도록 만든다.

default 가상호스트는 절대로 이름기반 가상호스트가 사용하는 주소/포트로의 요청을 서비스하지 않는다. 알 수 없거나 Host: 헤더가 생략된 요청은 항상 최초의 이름기반 가상호스트(설정파일에서 주소/포트가 처음으로 나온 가상호스트)가 서비스한다.

AliasMatch나 RewriteRule을 사용하여 어떤 요청을 특정 페이지(혹은 스크립트)로 재작성할(rewrite) 수 있다.

여러 포트에 대한 _default_ 가상호스트

위의 경우와 같지만, 서버는 여러 포트를 기다리고 80번 포트에 대해서 추가로 _default_ 가상호스트를 사용하고 싶다.

서버 설정

<VirtualHost _default_:80>
DocumentRoot /www/default80
# ...
</VirtualHost>

<VirtualHost _default_:*>
DocumentRoot /www/default
# ...
</VirtualHost>

80번 포트에 대한 default 가상호스트는 (반드시 와일드카드 포트를 가진 기본 가상호스트 이전에 나와야 한다) 지정하지않은 IP 주소로 보내진 모든 요청을 서비스한다. 주서버는 절대로 요청을 서비스하지 못한다.

한 포트에 대한 _default_ 가상호스트

80번 포트에 대해서만 default 가상호스트를 만들고 싶다.

서버 설정

<VirtualHost _default_:80>
DocumentRoot /www/default
...
</VirtualHost>

포트 80번에 지정하지않은 주소에 대한 요청은 기본 가상호스트가 서비스하고, 다른 지정하지않은 주소와 포트를 가진 요청은 주 서버가 서비스한다.

top

이름기반 가상호스트를 IP기반 가상호스트로 옮기기

(이름기반의 첫번째 예에서) 호스트명 www.example.org에 대한 이름기반 가상호스트는 자신의 IP 주소를 가져야 한다. 이름기반 가상호스트의 이전 IP 주소를 캐싱하는 네임서버나 프록시와의 문제를 피하기위해 옮기는 동안 둘 모두를 서비스하고 싶다.

방법은 VirtualHost 지시어에 새 IP 주소만을 (172.20.30.50) 추가하면되므로 쉽다.

서버 설정

Listen 80
ServerName www.example.com
DocumentRoot /www/example1

NameVirtualHost 172.20.30.40

<VirtualHost 172.20.30.40 172.20.30.50>
DocumentRoot /www/example2
ServerName www.example.org
# ...
</VirtualHost>

<VirtualHost 172.20.30.40>
DocumentRoot /www/example3
ServerName www.example.net
ServerAlias *.example.net
# ...
</VirtualHost>

이제 (IP기반 가상호스트를 통한) 새로운 주소와 (이름기반 가상호스트를 통한) 이전 주소 모두 가상호스트에 접근할 수 있다.

top

ServerPath 지시어 사용하기

두 이름기반 가상호스트를 가진 서버가 있다. 올바른 가상호스트를 선택하기위해 클라이언트는 올바른 Host: 헤더를 보내야 한다. 오래된 HTTP/1.0 클라이언트가 이 헤더를 보내지 못하면 아파치는 클라이언트가 어떤 가상호스트를 보려고하는지 알 수 없다 (그래서 최초의 가상호스트가 요청을 서비스한다). 오래된 브라우저와 가능한 호환을 유지하기위해 최초의 가상호스트를 만들고, 여기에 이름기반 가상호스트의 URL 접두사를 포함하는 링크 목록 페이지를 둔다.

서버 설정

NameVirtualHost 172.20.30.40

<VirtualHost 172.20.30.40>
# primary vhost
DocumentRoot /www/subdomain
RewriteEngine On
RewriteRule ^/.* /www/subdomain/index.html
# ...
</VirtualHost>

<VirtualHost 172.20.30.40>
DocumentRoot /www/subdomain/sub1
ServerName www.sub1.domain.tld
ServerPath /sub1/
RewriteEngine On
RewriteRule ^(/sub1/.*) /www/subdomain$1
# ...
</VirtualHost>

<VirtualHost 172.20.30.40>
DocumentRoot /www/subdomain/sub2
ServerName www.sub2.domain.tld
ServerPath /sub2/
RewriteEngine On
RewriteRule ^(/sub2/.*) /www/subdomain$1
# ...
</VirtualHost>

ServerPath 지시어때문에 URL http://www.sub1.domain.tld/sub1/에 대한 요청은 항상 subl-가상호스트가 서비스한다.
클라이언트가 올바른 Host: 헤더를 보낸다면, URL http://www.sub1.domain.tld/에 대한 요청은 subl-가상호스트에서만 서비스한다. 만약 Host: 헤더를 보내지않으면 클라이언트는 최초의 호스트에 있는 정보페이지를 보게된다.

여기에 문제가 있음을 주의하라: 클라이언트가 Host: 헤더를 보내지않으면 http://www.sub2.domain.tld/sub1/에 대한 요청도 subl-가상호스트가 서비스한다.

RewriteRule 지시어를 사용하여 올바른 Host: 헤더를 보내는 클라이언트는 (예를 들어, URL 전치사가 있거나 없는) 두 URL을 모두 사용할 수 있다.


+ Recent posts