728x90

Nginx는 서버 블록 (Apache의 가상 호스트)을 수행 할 수 있는 기능이 있지만 프록시 헤더 내에서 IP 주소를 전달해야 할 때 문제가 발생합니다.

프록시 서버 뒤에 위치한 서버들에서는 실제 방문자의 IP가 아닌 프록시 서버의 IP만 보인다는 점입니다.

하지만 해결책이 있습니다.

 

※ 프록시 서버 구성 편집

(Docker 사용 경우 - <path to nginx-proxy-manager>/data/nginx/default_host/site.conf)

 

먼저 프록시 서버(프론트엔드)에 있는 프록시 서버 블록을 편집합니다. 기본적으로 내 모습은 다음과 같습니다.

 

## redirect uname.in to https

server {

  listen      80 default_server;

  server_name uname.in;

  return 301 https://uname.in;

}

 

## redirect www prefix to https

server {

  listen      80;

  server_name www.uname.in;

  return 301 https://www.uname.in;

}

 

server {

  #listen 80;

  listen 443 ssl default_server;

  server_name uname.in;

  ssl_certificate /etc/nginx/ssl/uname.in.crt;

  ssl_certificate_key /etc/nginx/ssl/uname.in.key;

 

  location / {

    proxy_set_header  Host $host;

    proxy_set_header  X-Real-IP $remote_addr;

    proxy_set_header  X-Forwarded-Proto https;

    proxy_set_header  X-Forwarded-For $remote_addr;

    proxy_set_header  X-Forwarded-Host $remote_addr;

    proxy_pass        http://wp.uname.in;

  }

}

 

다음 세 줄을 포함하는 것이 매우 중요합니다.

Host : 프록시 서버의 이름과 포트.

X-Real-IP : 방문자의 IP 주소를 가상 호스트로 보냅니다.

X-Forwarded-For : 방문자의 IP 주소를 가상 호스트로 보냅니다.

 

※ 프록시 되는 서버 구성 편집

(/etc/nginx/sites-available/default)

 

이제 프록시 서버(백엔드)의 구성에서 서버 블록 내에 아래 3개의 중요한 행을 포함해야 하지만 위치 블록 외부에 있어야 합니다.

 

server {

    #other junk here blah blah

    set_real_ip_from 10.0.0.0/8;

    real_ip_header X-Real-IP;

    real_ip_recursive on;

 

    location / {

       #some junk here

    }

}

 

세 줄은 다음과 같습니다.

 

set real ip_from : nginx가 이 범위 내의 프록시 서버에서 실제 방문자의 IP를 가져 오도록 지시합니다. 10.0.9.2와 같은 고정 IP 주소 일 수도 있습니다.

real_ip_header : nginx는 주어진 주소에서 클라이언트의 IP 주소를 선택합니다.

real_ip_recursive : 프록시 서버의 IP가 방문자의 IP 주소로 대체됩니다.

728x90

※ Nginx 설치

 

① Nginx를 설치합니다.

apt-get install nginx

 

② 만약 방화벽을 사용하고 있다면 포트를 Open해 줍니다.

ufw allow 'Nginx Full'

 

③ 서버 IP로 접속해 Nginx가 잘 동작하는지 확인합니다.

 

※ Nginx 시작, 정지 명령어 

 

① Nginx 시작

systemctl start nginx

 

② Nginx 정지

systemctl stop nginx

 

③ Nginx 재시작

systemctl restart nginx

 

④ Nginx 리로드

systemctl reload nginx

 

⑤ 시스템 부팅시 Nginx 자동 시작

systemctl enable nginx

 

⑥ 시스템 부팅시 Nginx 자동 시작 해제

systemctl disable nginx

 

※ PHP 설치 

 

① php-fpm을 설치합니다.

apt-get install php-fpm

 

② /etc/nginx/sites-available/default 수정 

#location ~ \.php$ {

# include snippets/fastcgi-php.conf;

#

# # With php-fpm (or other unix sockets):

# fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;

# # With php-cgi (or other tcp sockets):

# fastcgi_pass 127.0.0.1:9000;

 

#}

 

를 아래와 같이 수정 

 

location ~ \.php$ { 

  include snippets/fastcgi-php.conf;

#

# # With php-fpm (or other unix sockets):

  fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;

# # With php-cgi (or other tcp sockets):

# fastcgi_pass 127.0.0.1:9000;

}

 

또한 index.php를 자동 인식하게 하려면

index index.html index.htm index.nginx-debian.html;

 

를 아래와 같이 수정

 

index index.html index.htm index.nginx-debian.html index.php;

 

③ php 정상동작 테스트

/var/www/html 내에 phpinfo.php를 만들고 아래코드를 입력하고 저장

 

<?php phpinfo(); ?>

 

웹브라우저로 서버IP/phpinfo.php 로 접속해 보면 정상동작 확인가능

 

※ MariaDB 설치 

 

① MariaDB와 php-mysql, php-gd을 설치합니다.

apt install mariadb-server php-mysql php-gd

 

② 설정

다음과 같이 명령하여 root 계정 비밀번호 등 몇 가지를 설정합니다.

mysql_secure_installation

 

③ 웹에서 root 계정 사용

웹에서 root 계정을 사용할 수 있게 하려면 수정해야 합니다. MariaDB에 접속합니다.

mysql -u root -p

 

다음을 차례대로 입력합니다.

 

use mysql;

update user set plugin='' where user='root';

flush privileges;

quit;

+ Recent posts