기술 검토(?) 겸, 이틀간 node.js 를 이용해서 이런 저런 스터디 & api 개발을 했다.

 

이제, 서버에 올려야 하는데......

 

일단 첫번째 장벽 발생.

 

기존 APM 이 동작중인 상태에서, node.js 로 작성된 서버가 '같이 잘 살아야'만 하는 상황이 됨.

 

조금 찾아보니...

 

1. 내부적으로 다른 포트에 node.js 기반의 (다른것도 물론 가능) 서버를 열고,

2. apache 의 VirtualHosts 설정에서 ProxyPass 를 설정해서,

3. 특정 url 로 접근시, 1번으로 '돌려주는' 것.

4. 외부에서 보면, 특별히 변화 없음. 내부적으로만 돌려막기(?) 하는 동작으로 보임. :)

 

자, 이제 설정을 해보자.

 

먼저 준비물 - module - 2개.

 

 mod_proxy, mod_proxy_http

 

1. ubuntu apache 서버는 기본적으로 두 모듈이 '설치'가 되어있음.

 

/etc/apache2/mods-available

 

 - 이 안에, proxy, proxy_http 설치된 상태.

 

 - 실제 설치는, 내부적으로는 ./mods-enabled 에 sort link 해주면 됨.

 - 이경우, 직접 하기 보다, '명령어'를 이용하는게 그냥, 맘이 놓이니...

 

 sudo a2enmod proxy 

 sudo a2enmod proxy_http

 

./mods-enabled 안에서 소프트 링크 확인.

 

 

2. 가상 호스트 설정.

 

 ./sites-available 내부의 기존파일 혹은 신규 파일 추가.

 

 다음 내용 추가, 수정 등등 적당히.

 

<VirtualHost *:80>

DocumentRoot /var/www/example.com/public_html

ServerName  www.example.com

 

# Index file and Document Root (where the public files are located)

DirectoryIndex index.html index.php

 

# Log file locations - 아래는 필요하다면.. :)

LogLevel warn

ErrorLog  /var/www/amazeapp.com/log/error.log

CustomLog /var/www/amazeapp.com/log/access.log combined

 

 

# 여기서 부터 본격적 추가.

 

ProxyRequests off

 

<Proxy *>

   Order deny,allow # 이부분의 경우, 콤마(,) 사이에 공백 없어야 함!

   Allow from all

</Proxy>

 

<Location /> # 내부적으로 접속 노드를 늘리고 싶다면 여기에 추가. :)

   ProxyPass http://localhost:3000/

   ProxyPassReverse http://localhost:3000/

</Location>

 

</VirtualHost>

 

 

 - 최종적으로 추가해야 하니, 다음과 같이 사이트를 가능하게 합시다!

 

 sudo a2ensite 파일명 (신규 추가의 경우만.)

 

3. 아파치, 재시작.

 

결론.

 

 잘 됨. 나머지 한가지는 '직접' 연결시 https redirect 설정 부분(얼핏 봤을때 VirtualHost)에 추가로 기억. :)

 

 덧붙여서 https 를 cloud flare 의 flexable ssl 접근시, node.js 쪽 pass direct 설정이 필요하다고 함.

 X-Forwarded-For 를 header 에 포함해주면 서버가 클라이언트의 '진짜' ip 확인 가능 하다고 기억함.

X-Forwarded-For 은 충분히 header 에서 언제든 조작이 가능하기떄문에 진짜 ip 가 아닌 클라이언트의 ip 를 가져올 수 있는 방법

 

 

레퍼런스.

 http://garrows.com/blog/running-node-js-and-apache-together-using-mod_proxy/

 https://github.com/sindresorhus/guides/blob/master/run-node-server-alongside-apache.md

 http://stackoverflow.com/questions/28062159/node-js-https-on-cloudflare

 

 

뱀발.

 node.js 흐으음............ 나중에 좀 정리해서 따로 적어야 할 듯!

Posted by 코나

댓글을 달아 주세요

  1. apache2 node.js 리버스 프록시 구글링하다 우연히 보게되었습니다.

    결론 밑의 글 부분을 한번 봐밨는데요
    =============
    덧붙여서 https 를 cloud flare 의 flexable ssl 접근시, node.js 쪽 pass direct 설정이 필요하다고 함.

    X-Forwarded-For 를 header 에 포함해주면 서버가 클라이언트의 '진짜' ip 확인 가능 하다고 기억함.
    =============

    이런게 말씀해주셨는데
    X-Forwarded-For 은 충분히 header 에서 언제든 조작이 가능하기떄문에 진짜 ip 가 아닌 클라이언트의 ip 를 가져올 수 있는 방법이라고 정정해주실 수 있을까요?

    해당 글으로 로컬 환경을 x-forwarded-for 으로 제한하거나 하는 경우에 충분히 취약점이 될 수 있다고 생각합니다.

    2021.01.08 21:24 [ ADDR : EDIT/ DEL : REPLY ]
    • 좋은 말씀 감사드립니다.

      이쪽에는 거의 로그인을 하지 않다가, 오래간만에 와서 말씀해 주신 내용을 간단히 본문에 추가하였습니다. :)

      2021.10.01 04:37 신고 [ ADDR : EDIT/ DEL ]

시작은 그랬다.

VMWare 안에 NAT 로 개발 서버를 놓고, 같은 네트워크 안에서 다른 '장비'가 '고정'된 주소 - ip 말고 ㅠ.ㅜ - 로 접근하고 싶은 것.


1차적인 목표는 VMWare 안의 서버에 DNS - bind9 - 를 올리고, 밖에서 접근하려 하였으나, - UDP, TCP 53 을 열었음 - 실패. (아마도, 안에서 밖으로 나오지 못해서 그런 듯..)


결국, 같은 네트워크에 묶기로 결정, 별도의 DNS 운영으로 결정.


이래저래 잠시 찾다가 재미있는 두가지를 찾아냈다. (일찍 알게 되었다면 전체 서버 설정을 다 이걸로 했을지도)


1. Ubuntu 기반의 '가벼운' 리눅스 서버, JeOS - Juice 라고 읽는다 함. - 를 이용해서 서버 설치

 - 재미있게도 Virtual Machine 용 패키지가 존재. :) 용량도 가벼운 90메가.

 - 가장 매력적인 점은, apt-get 지원! (두둥!)

 - http://www.pqr.com/ubuntu-jeos


2. Bind9 말고, 좀 더 가벼운 DNS 서버 물색, 그리고 찾은 DNSMasq.

 - apt-get 으로 설치 가능

 - 다 필요없고, 설치 후, 그냥 /etc/hosts 에서 원하는거 간단히 설정하면 끝.

 - 나중에 다른 네트워크에서 하드웨어 테스트가 필요한 경우, /etc/hosts 정도 설정만 마져주면 됨. (물론, 디바이스쪽 dns 도 수정해줘야..)


결론


잠시 테스트 해보니 잘된다! 이상하게 요즘 'OSX Server'를 깔기 싫었는데, 결론적으로 '두개'의 VM 을 돌리는 걸로 마무리! :)


1번의 서버는 기본 설정이 256 메가 메모리로 잡혀서 돌아가는 중. 하드 용량은 1기가 max 로 잡힌 상태, 대략 절반 남은 듯. :) - 용량이 커진 이유는 사실, apt-get update, apt-get upgrade.. 때문일지도.. ㅎㅎ :)


Posted by 코나

댓글을 달아 주세요

얼마만의 포스트, 그것도 좌충우돌 서버관리 인지 모르겠습니다. :)


Knowledge base 인 관계로, '반말'로 기록합니다. :)


업데이트의 편의성-.-을 위해서 ftp 서버를 설치 완료. - 물론, apt-get 으로.


vsftpd 의 경우, /etc/vsftpd.conf 에서 관리되는데, 목표는 재부팅등의 경우 자동 실행에서 ftp 데몬을 제거하기.


이래저래 고민중, 선택한 방법은 config 파일 내부에서 listen=ON 항목을 OFF 함으로써 원천적으로 막기.


반대로 필요한 경우, config 수정 후 다시 서비스 스타트 하기.


필요할때만 쓸 수 있으니 만족스럽다. :)

Posted by 코나

댓글을 달아 주세요

우연히 클리앙에서 알게된 NoSQL 로 시작된 일이, 실제 프로젝트에 적용하기 위한 설치 단계까지 와버렸다. 후덜덜;;

결론은 대세(?)를 따라서 몽고디비로 결정.

우분투에 깔기 전, 버철에 이런 저런 설치 = root 계정 살리고, apm 설치, public_html이 ~(틸드)와 놀 수 있도록 설정해주고, php 무시하지 않도록 설정해주었음. (링크 없음 ㅠ.ㅜ 다음번에 다시 구글링 하거나 해야 함..)
 마지막으로 samba 로 마무리. 

몽고 디비를 깔기 위해 다음과 같은 단순 작업을 진행함.

 **. 우분투에 몽고 디비 깔기.
 - 이번에는 걍 바이너리 상태로 하기로 함. -> 아직 10gen apt 패키지에 최신 버전 2.0 이 적용 안되었음.
 1. 바이너리 다운로드 (http://www.mongodb.org/downloads) - 리눅스 64비트로 하자.
 2. 서버로 복사 & 적당한 위치에 놓는다.
 3. 루트에 /data/db 디렉토리 생성 (안하면 안됨)
 4. 2번의 적당한 위치의 디렉토리 안 bin/mongod 실행. -> 백그라운드로 돌리면 금상첨화겠지?
 
***. php 와 몽고디비 연결하기
 1. pecl 이 필요함
  - apt-get install php-pear
 2. sudo pecl install mongo
 3. php.ini 파일 수정이 필요함.
  extension=mongo.so 를 추가
 4. 테스트로 찍어보면 됨. 끝. 
 
 관련글 :: http://www.mongodb.org/display/DOCS/PHP+Language+Center

쭉 하다보니, 프로세스 관리가 잘 안되어서 기초중의 기초를 찾아서 헤멤. 오래간만에 하려니.. ^^;;;;

*1. 프로세스 관리.

 앱을 백그라운드로 띄우는 방법.
  1. 명령어 뒤에 한칸 띄고 &
  혹은
  1. 포그라운드로 띄운 뒤, 서스펜드(ctrl+z),
  2. bg %프로세스아이디
  
  백그라운드 상태에서 포그라운드로 가져오기
  1. jobs -> 프로세스 번호 확인 -> fg %프로세스아이디
  
  로그아웃 후 다시 로그인 후 (터미널에 묶이지 않은) 프로세스 죽이는 방법
  kill 프로세스아이디 -> (top, 혹은 ps -rf | grep mongo 등으로 확인) -> 이게 정상 종료의 교과서임. 아니면 강제로 죽여야 함.
  
  관련 글 :: http://uzoogom.tistory.com/tag/top
 
이제 남은 건, 운영 서버에도 몽고 디비 설치하는 일. 그리고, 브릿지 완성하기.

그나저나, 간만의 포스팅이 너무 딱딱하죠? ^^;;

조만간 앱이 나온답니다, 그때! 컴백할께요~~ =3=3=3 

-코나- 

덧: 그나저나 왜자꾸 몽고디비가 아니라, 몬도디비;;라고 치는걸까. 난..ㅠ.ㅜ 
Posted by 코나

댓글을 달아 주세요

워드 프레스로 사이트를 운영하는 경우, 간혹 서버 아이피가 변경될 수 있습니다.

이경우, 사이트에 접속해도 잘 안보이고, 관리자 페이지로 접근이 안되는 경우가 발생할수도 있는데요, 이에 대한 해결책을 찾았습니다.

워드 프레스가 사용하는 데이터베이스 (제 경우에는 mysql) 에서, 옵션 테이블 값을 수정해야 합니다.

테이블 중, wp_options 를 보면, options_name 이 siteurl 인 것과 home 인 것, 두가지가 존재하는데요,

이 옵션의 값을 보면 아이피로 설정된 경우가 있습니다.

이전 값으로 되어있는 아이피를 변경된 아이피로 설정하면 됩니다.

업데이트 쿼리야 뭐..

update wp_options set option_value = '변경된 값' where option_id = 레코드아이디;

-코나-

덧. 원래는 ebadaq.com 카테고리에 가깝지만, 서버 운영과도 밀접하기에, 서버 관리쪽으로 카테고리 설정.
Posted by 코나

댓글을 달아 주세요

  1. 도움되는 내용 되게 잘 배우고 갑니다

    2020.11.19 23:41 [ ADDR : EDIT/ DEL : REPLY ]

최근 몇몇 프로젝트를 진행하면서, (실질적으로는) 혼자하는 프로젝트이기에, 소스 버전 관리에 대해서 별다른 생각을 하지 않고 지냈었다.

하지만, 프로젝트를 진행하면서 항상 느끼지만, '마음이 급해질 수록' 그 기능이 빛을 발하는 버전 관리툴.

늦었지만, 사후 약방문이지만, 오래간만에 subversion을 서버에 설치하였다. (아, 리눅스에서 설치하는 건 처음이다. 항상 윈도에서만 설치해서...)
사실, 정말 좋은 포스팅을 구글링중에 발견, 간지러운 부분들을 긁어가면서 빠르게 작업할 수 있었다.

간단히 소개를 하면, (다들 알다시피) 안녕 리눅스는 패키지 시스템이라 별다른 무리없이

pkgadd subversion <- 서브 버전 클라이언트 설치
pkgadd subversion-server <- 서브 버전 서버 설치 ( 안녕리눅스 공홈 qna를 보면, 서버과 클라이언트를 분리했다고 한다.)

두 명령어를 root 권한에서 입력해주면 된다.

그 다음, 레포지토리로 사용할 기본 폴더를 만들어주고,

mkdir /home/svn

그 안에 필요한 레포지토리를 생성하고,

cd /home/svn
svnadmin create --fs-type fsfs sample
(sample이라는 레포지 토리를 svn 안에서 생성함.)

레포지토리 내의 config 파일을 수정한다.

vi /home/svn/conf/svnserve.conf

수정 후, passwd 에 계정과 비번을 추가한다.

vi /home/svn/conf/passwd

그리고, 서버 구동.


#svnserve -d -r /home/svn

svn은 3690 포트를 사용하므로, 외부에서 접근이 안되면 oops-firewall 의 TCP_ALLOWPORT에 3690을 추가한다.

이정도면 된다. :)

자세한 포스팅은 원글 링크 참조.

워낙 원글이 잘 되어 있어서... (이 글의 요약본은 혹시나 몰라서!)

소스 관리부터 시작!

-코나-
Posted by 코나

댓글을 달아 주세요

정말 오래간만의 좌충우돌 서버관리.

s-ftp를 이용한 업로드, 테스팅 작업에 지친(?) 나는 결국 맥과 리눅스 서버를 samba로 연결하기로 결정한다. :)

먼저, samba(이하 삼바) 패키지를 확인해 보았다.

pkginfo -v -l samba

패키지 존재를 확인, 즉시 패키지 추가 작업을 하였다.

pkgadd samba

의존성 패키지 설치 후, 설정으로~

삼바 설정은 /etc/samba/smb.conf 파일에서 한다.

편의를 위해, 필요한 디렉토리만 연결할 생각이었기에...

[porfin]
comment = PorFin Public html
path = /경로
valid users = 사용자아이디
read only = No


간단히 설명을 하면,
첫줄 대 괄호는 윈도에서 볼 수 있는 공유 폴더명,
코멘트는 말그대로 코멘트,
패스는 공유할 경로,
벨리드 유저는 접근할 사용자 아이디
읽기 전용 여부. :)

이 작업이후 바로 되는게 아니라... 계정을 추가해야 한다.
(삼바 3 버전을 기준으로 설명.)

문서에 보면 smbuseradd 명령어와 smbpasswd를 이용하라고 하였는데,
문제는 smbuseradd 가 없다는 것.

바뀌었단다.

smbuseradd -> smbpasswd -a 사용자아이디

자연스럽게 사용자 아이디 및 비번 정의 이후, 서비스 재시작.

service smb restart


맥에서의 접근은, Finder 선택 후, command + K

smb://아이피

그 이후 로그인 작업을 진행하면 된다! :)

고고씽!

-코나-
Posted by 코나

댓글을 달아 주세요

네트워크 사용량을 알기 위해서 개발 서버에 nTOP  서비스를 설치하였다.

안녕 리눅스이기에, 당연히 기본 명령은

>> pkgadd -v ntop

재미있는 점은 ntop 이 기존에 init.d 에 포함되도록 패키지 설치가 이루어졌지만,

httpd Service 가 동작하지 않는 경우가 발생하여 수동으로 돌려줘야 한다. :)

암튼, 일단 패키지는 설치가 되었고...

nTop의 디렉토리 구조를 잠시 이야기하면,

첫 설치 이후, 앞으로 수집될 사용량 저장 공간 및 admin 비밀번호 생성 위치는

/usr/share/ntop

이 된다.
- etc/ntop/ntop.conf 참고

자, 이제 admin 비밀번호를 생성해야 한다.

>>ntop -P /usr/share/ntop -A

 비밀번호 입력해 준뒤,

/etc/ntop/ntop.conf  파일을 수정해준다. 입맛에 맛도록 - 사실 거의 수정할거 없어보임

수정이후, 첫기동.

>>ntop @/etc/ntop/ntop.conf &

&붙여야 백그라운드로 돌아가므로. :)

그럼 확인은?

http://주소:3000 <- 기본설정에서 웹포트는 3000 이므로.

-코나-

ps1. 한가지 마음에 걸리는 -m 옵션, 즉 내부 네트워크 선언을 좀 깔끔하게 못하고 아예 설정을 안했다는 거..
ps2. 아직 사이트를 사용하지 않는 관계로, 사실 수집에 대한 별의미가 없다.
ps3. 근데, oops firewall 에서 3000 포트 열어야 하지 않을까? :( - 당근 열어야 한다.


Posted by 코나

댓글을 달아 주세요

주소를 샀고, 이제는 가물가물한 네트워크 구성도에 대해서 끙끙하기를 이틀,

결국 대략 방향을 잡긴 잡았다.

현재, 안녕 리눅스에 bind 를 이용한 dns 세팅중...

레퍼런스를 남겨놓고, 내일 마무리를.. 쩝쩝..

1. 제 1 차 레퍼-.-런스,.
http://kin.naver.com/db/detail.php?d1id=1&dir_id=10202&eid=ae+naDAxcNGjSytmLVtjjpwXL5CFCHZD


2. 제 2 차 레퍼런스.. 뷁;

http://kin.naver.com/db/detail.php?d1id=1&dir_id=10202&eid=23K3a+X7PA3Deov2ySC/hZt7Mh5x5Tbr

3. 원인 파악 레퍼런스... 흑흑흑..

http://kin.naver.com/db/detail.php?d1id=1&dir_id=10202&eid=tS1E1hR8cV4ZijA38nML2rKiyLAQHPHR&qb=vsiz57iutKq9uiBiaW5kILyzwaQ=

결론은, 호스트설정을 통해서 미리 세팅해둔 dns 서버에 연동을 해야 한다는 거..

일단은 여기까지.

자세한 세팅 내용은 서버 세팅이 완료된 이후에 컨티뉴...

-코나-

덧. 덤으로 업데이트 사건;;도 컨티뉴... =.=;;

Posted by 코나

댓글을 달아 주세요

최근들어서 CentOS 기반의 서버 하나를 작업하게 되었다.

임대형 서버인데, 그럭저럭...

일단, 서비스 업체에서 세팅해준 상태로, ssh 를 이용 로그인 성공.

공부한대로 내 계정을 추가 했다. ^^v

자, 이젠 내 계정으로 접속해서 작업을....

어 근데, 안되네.. -.-;;

>> 요녀석을 반대로 이용해 본다. <<

원본 링크 : http://cafe.naver.com/ssyangcal.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=2262

openssh가 설치되어 있는 환경에서 일반 사용자의 SSH접속 막기

일반적으로 사용자들은 CUI기반의 인터페이스 사용을 기피한다.
따라서 이러한 불필요로 인해서 사용하지 않는 SSH접속을 막기위해서
openssh는 우수한 키워드를 제공하고 있다.

# man sshd

  참고키워드 : AllowGroups, AllowUsers, DenyGroups, DenyUsers

  ! 기본적으로 openssh는 모든 사용자의 ssh접속을 허용한다.

  키워드
      AllowGroups : 해당 그룹에 속한 사용자만 접속할 수 있다.
      AllowUsers   : 열거한 사용자만 접속할 수 있다.
      DenyGroups : 전체 사용자의 접속을 허용하고 명시된 그룹은 접속에서 제외된다.
      DenyUsers   : 전체 사용자의 접속을 허용하고 명시된 유저의 접속은 제외된다.
      해당 그룹, 유저는 space로 구분한다.

  적용
      /etc/ssh/sshd_config 파일에 키워드를 명시하고 그룹 또는 유저명을 기입한다.

     예) 시스템관리용으로 생성한 maintain, master 이라는 유저만 접속을 허용
             --->  /etc/ssh/sshd_config 파일에
                     AllowUsers      maintain master    (space bar로 구분)

     예) 모든 유저의 접속을 허락하고 windog 라는 유저의 접속을 막는다.
             --->  /etc/ssh/sshd_config 파일에
                     DenyUsers      windog

    이상을 적용하기 위해서는 sshd를 재실행해야 한다.

# /etc/init.d/sshd restart

>> <<

역시, 설정을 확인해보니, root 권한에 가까운 사람 하나에게만 허용이 되어있었다.

즉시 내 계정-.-을 추가. ssh 재시작. 오오 된다!

근데 이번엔 su - 가 안먹히네.. 루트가 필요하건만.. ToT


역시 인터넷의 힘을 빌려!...


>>  [Gentoo] SU 명령이 안될 때(permission denied)  리눅스 관련(일반) <<


원본링크 : http://blog.naver.com/keep2smile/80042291026

★ 원인

    1. /etc/group에 wheel 부분에 현재 su 명령어를 수행하려고 하는 계정이 등록되어있지 않아서 이런 현상이 나타난다.

★ 해결

    1. vi 편집기로 /etc/group을 연다.

            root::0:root
            bin::1:root,bin,daemon
            daemon::2:root,bin,daemon           
            sys::3:root,bin,adm 
                     ....

            wheel::10:root,gentoo

                     ....
            keep2smile:x:1000:

    2. 위 wheel 부분에 wheel::10:root,gentoo,”추가 할 사용자계정” 작성 하면 된다.

            root::0:root
            bin::1:root,bin,daemon
            daemon::2:root,bin,daemon
            sys::3:root,bin,adm
                     ....

            wheel::10:root,gentoo,keep2smile  

                     ....
            keep2smile:x:1000:

    3. 다 수정 하였으면 저장하고 닫자.(:wq)

※ group 수정은 root 계정으로 수정하여야 한다. 혹시나 하는 노파심에서.;;;

 >> 라고 한다.. <<

아, 수정 이후 추가된 계정은 재로그인 해야 한다. 그러면 된다. ^^

이젠 계정별로 아파치를 사용할 수 있게 해줘야 한다.. =3=3=3

To be continued..

-코나-


    



Posted by 코나

댓글을 달아 주세요

  1. 더이상은 당신에게 맘 주려 하지않는 사람을 위해 슬퍼하지말아요.
    Topics related articles:


    http://madeer.tistory.com/archive/201112 5

    http://gabs.tistory.com/47 10

    http://dreamcast11.tistory.com/626 8

    http://koshts.tistory.com/m/post/view/id/50 9

    2013.07.12 10:17 [ ADDR : EDIT/ DEL : REPLY ]