vultr 서버를 사용중이다. 새로운 미션이 있어 관련 사항을 정리한다.

새로운 미션은 서버 접속량(사용량)이 늘어날때 - 서버를 추가 생성하여 부하를 분산하고자 한다.

일단 간단한 구성으로 메인+서브 형태로 구성한다.
해당 메인서버는 톰캣+nginx+MySQL 서버가 동작하는 서버이다.
과부하시 서브로 톰캣 서버를 세팅해서 부하를 분산하고자 하는 미션이다.

1) vultr API 를 활성화 시킨다.

Account > API 메뉴에서 API key 를 활성화 시킨다.

2) vultr-cli 콘솔 관리툴을 설치한다.(MacOS 기준)

brew install vultr/vultr-cli/vultr-cli

3) API key 등록

vi $HOME/.vultr-cli.yaml

내용
api-key: {YOUR-API-KEY}

4) 새로운 인스턴스(서버) 생성하기

vultr-cli instance create --region="icn" --plan="vc2-1c-1gb" --os=167

최소 3가지 항목을 입력하여 생성한다.

1) 서버 생성 지역
vultr-cli regions list

...
icn	Seoul		KR		Asia
...

2) 서버 OS
vultr-cli os list

...
167	CentOS 7 x64				x64	centos
...
1743	Ubuntu 22.04 LTS x64			x64	ubuntu
...

3) 서버 사양
vultr-cli plans list |grep icn
ID				VCPU COUNT	RAM	DISK	DISK COUNT	BANDWIDTH GB	PRICE PER MONTH		TYPE	GPU VRAM	GPU TYPE
vc2-1c-1gb			1		1024	25	1		1024		5			vc2	0
...

여기까지가 기본 사용법이다.

추가로 VPC 연동 / 최초 설치 스크립트 설정 등 관련부분은 정리하도록 하겠다.

 

 

테스트 서버가 필요한 경우 약 100$ 가량의 혜택을 받을 수 있는 광고 링크입니다.

이미지 클릭하여 가입

위 링크를 통해 가입하면, 이런식으로 약 2주간 100$ 가량의 Credit 을 쓸 수 있습니다.

결제(Credit Card / Paypal 등) 설정을 꼭 해야하는지는 불확실 하지만, 2주후에 테스트 서버 삭제하고, 해지하면 될 듯 합니다.
(아마도 악용?해서 가입했다 해지했다 하는 경우가 있을 수 있으니, 카드 인증 등이 필요할 듯 함)
물론 서비스가 좋아서 그대로 계속 써도 되겠죠.

vultr 서비스 사용해보시려면 클릭. ( https://blog.1day1.org/655 )
(무료 100$ 사용 가능)

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

우분투 20.04 에서 기본 패키지로 phpmyadmin 을 설치했다. ( apt install phpmyadmin )
(DB 관리툴은 여러가지가 있지만, 손에 익어서 그런지 phpmyadmin 이 제일 낫다.)

설치 / 설정은 구글링 해보면 잘 나와 있다.(세팅후 접속시 이슈를 정리한다)

그런데, 설정 후 접속해보면 다음처럼 로고까지만 나오고 나오지 않는다.

아래에 로그인 화면이 나와야 하는데, 안나온다.

개발자 도구에 보니 , jquery 등을 불러오지 못한 현상이다.

사실 OOO도메인/phpmyadmin 등으로 접속하면 잘 나오는데, 문제는 phpmyadmin 을 다른 이름으로 바꿀때 나오는 이슈이다.

phpmyadmin / pma 등 자주 쓰는 이름은 무작위 공격에 노출되게 되어 , 가능하면 안쓰는 이름으로 바꿔서 하려고 한다.
즉, OOO도메인/db-secure 등과 같은 자신만의 이름으로 바꾼다.

ln -s /usr/share/phpmyadmin /{nginx-document-root}/db-secure

{nginx-document-root} 는 OOO도메인 을 설정한 위치이다.

저렇게 심볼릭링크만으로 완료되면 좋겠는데, 저렇게 하면 js 파일등이 /db-secure/js/vendor/jquery/jquery.min.js 위치에서 불러와야 하는데, nginx 기본설정으로는 해당위치에 파일을 로딩하지 못한다.
실제 접근하는 주소를 /usr/share/phpmyadmin/js/vendor/jquery/jquery.min.js 가 되도록 설정해줘야 한다.

location /db-secure/ {
    root /usr/share/;
    index index.php index.html index.htm;
    location ~ \.php$ {
        root /usr/share/;
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_read_timeout 300;   
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    location ~* ^/db-secure/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
        root /usr/share/;
    }
}

위 설정 후에 systemctl restart nginx 로 설정을 적용한다.

그러나 접속해도 동일한 현상이 발생. js 파일 접속주소가 이상하게 되어 있다.
/usr/share/db-secure/js/vendor/jquery/jquery.min.js 로 접근한다.

다음처럼 해서 해당 경로를 만들어 줬다.

cd /usr/share
ln -s phpmyadmin db-secure

위 설정후에 nginx 를 재시작 하면 다음처럼 정상으로 나온다.

 

뭔가 설정이 찜찜한 구석이 있지만, 위와 같이 해결.

추후 좀더 깔끔한 설정을 찾으면, 추가 메시지를 남기겠다. 일단 끝.

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

https 를 사용하는 것은 옵션이 아니라 이젠 필수요소인듯 하다.

명령은 2줄이면 될려나?  

apt install certbot python3-certbot-nginx
certbot --nginx -d {도메인} -d {여러개일때 도메인 추가}

나중에 도메인을 추가하려면 2번째 명령을 -d 옵션 추가해서 다시 해주면 된다.

명령 후 다음과 같은 메시지가 나오면.

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

2번 즉, http 로 접속하면 https 로 리다이렉트 해준다. (본인의 사례에 따라 1번이 필요하면 1번)

자동으로 cron.d 에도 넣어주어 주기적으로 갱신한다.(즉, 신경쓸 것이 없다)

예전에는 좀 귀찮았던것 같은데, 요즘은 그냥 한줄이면 끝나네.

끝.

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

목적은 다음과 같다. A 서버가 SXX 서버들에 API 데이터를 전송을 하는데, 서버호스팅의 트래픽이 몰리는 문제가 있다. 그래서 트래픽을 분산하고자 한다.가능한 코드를 적게 고쳐서 분산을 하고 싶다.

A -> SXX 로 바로 보내는 것이 아니라,  A -> B(proxy) -> SXX 로 보내게 된다.
그래서 트래픽을 A / B 가 나누어서 나오게 된다.

SXX.domain.co.kr 으로 원래 가던 트래픽이 SXX.domain.kr 으로 쏴주면 proxy 를 거쳐 원래주소로 가게된다.(SXX.domain.kr 은 B 서버로 설정해준다)

B서버의 nginx 설정은 다음과 같다.

server {
        listen 80;
        server_name ~^(?<subserv>.+)\.domain\.kr$ ;
        location / {
                resolver 168.126.63.1 ;
                proxy_pass http://${subserv}.domain.co.kr ;
                proxy_set_header Host $subserv.domain.co.kr ;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}

위와 같은 방식으로 해준다.


위 진한 부분의 resolver 를 주지 않으면 proxy_pass 의 ${subserv} 부분때문에 다음과 같은 에러가 난다.

2014/10/17 13:38:11 [error] 9577#0: *1 no resolver defined to resolve s13.domain.co.kr, client: 11.22.33.44, server: s13.domain.kr, request: "GET /aaa HTTP/1.1", host: "s13.domain.kr"
2014/10/17 13:40:44 [error] 15697#0: *1 no resolver defined to resolve s13.domain.co.kr, client: 11.22.33.44, server: ~^(?<subserv>.+)\.domain\.kr$, request: "GET /aaa HTTP/1.1", host: "s13.domain.kr"
2014/10/17 13:47:20 [error] 19726#0: *3 no resolver defined to resolve s13.domain.co.kr, client: 11.22.33.44, server: ~^(?<subserv>.+).domain.kr$, request: "GET /aaa HTTP/1.1", host: "s13.domain.kr"
2014/10/17 13:50:41 [error] 26918#0: *1 no resolver defined to resolve domain.co.kr, client: 11.22.33.44, server: ~^(?<subserv>.+)\.domain\.kr$, request: "GET /aaa HTTP/1.1", host: "s13.domain.kr"
2014/10/17 13:52:07 [error] 27502#0: *1 no resolver defined to resolve domain.co.kr, client: 11.22.33.44, server: ~^(?<subserv>.+)\.domain\.kr$, request: "GET /aaa HTTP/1.1", host: "s13.domain.kr"





반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

nginx 로 사이트를 운영중이다. 그런데 다음과 같은 에러가 나온다.

400 Bad Request

Request Header Or Cookie Too Large

nginx/1.6.1

무슨 문제일까?

설정값으로 바꿀 수 있을 것 같은데.


찾았다.

관련글 : http://wiki.nginx.org/HttpCoreModule#large_client_header_buffers

/etc/nginx/nginx.conf 등에 추가한다. http 또는 server 쪽에 넣어준다.

기본값은 4 8k

    large_client_header_buffers 4 16k;

16k 로 늘려줬다. 너무 늘리는 것은 좋지 않겠지.



반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
nginx 와 php-fpm 을 설치하고, tomcat 을 연동해서
php 와 jsp(spring,ibatis) 를 구동하기 위한 작업을 하고자 한다.

tomcat 설치는 생략. (centos 에서 패키지로 설치하는 방법을 사용했다.)
방법은 이곳을 참조
http://wavded.tumblr.com/post/258713913/installing-tomcat-6-on-centos-5
http://www.how2centos.com/installing-tomcat-6-on-centos-5-5-tutorial/
설치한 후에는 tomcat 구동설정.

주의 : java(jsp) 쪽은 잘 몰라 용어,설명에 오류가 있을 수 있으니 알아서 해석하세요.

1. invoker 주석해제.(서블릿 자동호출?)
  tomcat 기본 샘플,예제는 잘 돌아가는데, 본인이 만든 예제가 안된다면 아마도 invoker 설정이 되어 있을 것이다.   /etc/tomcat6/web.xml 을 열어서 2곳의 주석을 해제.
이 부분과
    <servlet>
        <servlet-name>invoker</servlet-name>
        <servlet-class>
          org.apache.catalina.servlets.InvokerServlet
        </servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>
이 부분이다.
    <servlet-mapping>
        <servlet-name>invoker</servlet-name>
        <url-pattern>/servlet/*</url-pattern>
    </servlet-mapping>
 이렇게 했는데 안되면.
context.xml 을 열면
그냥 <Context> 로 되어 있는데, <Context reloadable="true" privileged="true"> 이렇게 바꿔준다.

localhost:8080 으로 정상구동되는지 확인한다.
여기까지 되면 tomcat 쪽은 완료된것이다.

2. nginx 에서 php/static html 이외에는 모두 톰캣으로 넘기기

tomcat 을 연동할 부분은 다음과 같다.
이런식으로 server 설정한 부분에 추가해준다(php 등의 설정한 곳.)
    location / {
        try_files $uri $uri/ @tomcat;
    }

    location @tomcat {
        proxy_pass      http://localhost:8080;
    }
이렇게 설정하면 php 파일이외의 모든 접속은 톰캣에서 처리하게 된다.

이때 CI(Codeigniter) 등을 쓴다면, 따로 설정해 준다.
내 경우는 CI 로 된 어플을 각 CI_forum , KI_Board 폴더에 넣은 경우이다.
    location /CI_forum/ {
        try_files $uri $uri/ $uri/index.html @ciforum;
    }
    location /KI_Board/ {
        try_files $uri $uri/ $uri/index.html @kiboard;
    }

    location @ciforum {
        rewrite ^/CI_forum/(.+)$ /CI_forum/index.php/$1 last;
    }
    location @kiboard {
        rewrite ^/KI_Board/(.+)$ /KI_Board/index.php/$1 last;
    }
위 설정은 최적의 설정이 아닐 수 있으니, 참조 정도로만 쓰길 바람.


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
nginx 는 보통 다음과 같은 설정을 사용한다
location ~ \.php$ {
    #fastcgi_pass  127.0.0.1:9000;
    fastcgi_pass  unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_index  index.php;
    include        fastcgi_params;
}
이때 보안 문제가 생긴다.

aaa.com/bad.hack/bbb.php  이런식으로 비정상적인 접근이 허용된다.
이를 막기 위해 설정을 변경해줘야 한다.

참조 : http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=73442
/etc/nginx/fastcgi_params 파일에 다음을 추가한다.
set $fastcgi_script_realname $fastcgi_script_name;
if ( $fastcgi_script_name ~ ^(.*\.php)(/.*)$ ) {
    set $fastcgi_script_realname $1;
    set $path_info $2;
}
if (!-f $document_root$fastcgi_script_realname) {
    return 404;
}

또는 /etc/php.ini  설정을 바꿔준다.
cgi.fix_pathinfo=0
nginx 에서 php-fpm 으로 넘기기전에 막아주는 것이 좋을 듯 하니 첫번째 방법이 좋을 듯 하다.


참조 : CI 에서는 다음처럼 rewrite 룰을 적용했다.
if (!-f $request_filename) {
    rewrite ^/CI_forum/(.+)$ /CI_forum/index.php/$1 last;
}
CI 를 설치한 폴더에 따라 변형해서 사용하면 된다.



반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
2012-09-24
epel 패키지 주소가 바뀌었다.(언제인지 모르겠지만) - 기존 주소가 사라진듯.
rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm
(날짜를 보니 바뀌었다기 보다. 아래 주소가 사라진듯)


2011년 12월 19일
remi 패키지를 이용하는 방법

http://www.if-not-true-then-false.com/2011/install-nginx-php-fpm-on-fedora-centos-red-hat-rhel/

Centos 5 를 기준으로 설명(다른 버전은 위 링크를 참조)

## Remi Dependency on CentOS 5 and Red Hat (RHEL) 5 ##
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
 
## CentOS 5 and Red Hat (RHEL) 5 ##
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
Epel 과 remi  저장소를 이용한다.

nginx 는 nginx.org 에서 패키지를 제공하는 것 같다.
다음처럼 nginx.org 쪽으로 저장소 지정 (/etc/yum.repos.d/nginx.repo )
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

nginx , php-fpm 그외 php 모듈등을 설치한다.
yum --enablerepo=remi install  nginx php-fpm php-mysql php-gd php php-pear
php-mysql 때문에 mysql-libs 가 설치되는데, mysql 5.5.19 버전에 의존성이 있다.
기존 centos5 는 5.0.77 이다. 기본패키지를 쓰면서, remi 패키지를 사용하는 방법이 있을 듯 한데.
그냥 mysql 5.5.19 로 설치했다.
yum --enablerepo=remi install mysql mysql-server
의존성 에러가 발생하면 재설치 해주면 된다.
데이터가 없다면 /var/lib/mysql 을 삭제하고 설치해주는 것이 좋다.




[그냥 잡다한 정리]
핵심은 centos 에서 epel,ius repository 를 등록하고, php53u-fpm , php53u-pecl-apc 를 설치한다.
그외 추가 패키지는 알아서 설치 - php53u-mysql 같은...
상세한 설명은 생략.


nginx 를 설치하는 방법. 컴파일, 패키지


# 새 방법  ius 의 패키지 사용법 - 현 작동중지



# 컴파일
최신 버전에 좋다.
http://blog.sor.co.kr/32
  spawn-fcgi
http://starforum.kr/336
http://interfacelab.com/nginx-php-fpm-apc-awesome/

http://adityo.blog.binusian.org/?p=428

# php 를 사용하는 방법
spawn-fcgi 예전방식 - 컴파일이 필요없다. 간단함.
최근은 php-fpm 방식 - php 최신버전은 컴파일 필요없음. 그외에는 컴파일 필요.


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,