Mac apache 2.4.34 VirtualHost, ProxyPass 적용하기

Posted by nopsled
2019.01.14 13:30 운영체제

nopsled@Sangui-MacBookPro:/etc/apache2 (=`ω´=)$ apachectl -V

Server version: Apache/2.4.34 (Unix)

Server built:   Aug 17 2018 18:35:43

Server's Module Magic Number: 20120211:79

Server loaded:  APR 1.5.2, APR-UTIL 1.5.4

Compiled using: APR 1.5.2, APR-UTIL 1.5.4

Architecture:   64-bit

Server MPM:     prefork

  threaded:     no

    forked:     yes (variable process count)

Server compiled with....

 -D APR_HAS_SENDFILE

 -D APR_HAS_MMAP

 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)

 -D APR_USE_FLOCK_SERIALIZE

 -D APR_USE_PTHREAD_SERIALIZE

 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT

 -D APR_HAS_OTHER_CHILD

 -D AP_HAVE_RELIABLE_PIPED_LOGS

 -D DYNAMIC_MODULE_LIMIT=256

 -D HTTPD_ROOT="/usr"

 -D SUEXEC_BIN="/usr/bin/suexec"

 -D DEFAULT_PIDLOG="/private/var/run/httpd.pid"

 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"

 -D DEFAULT_ERRORLOG="logs/error_log"

 -D AP_TYPES_CONFIG_FILE="/private/etc/apache2/mime.types"

 -D SERVER_CONFIG_FILE="/private/etc/apache2/httpd.conf" 



nopsled@Sangui-MacBookPro:/etc/apache2 (=`ω´=)$ tree .

.

├── extra

│   ├── httpd-autoindex.conf

│   ├── httpd-dav.conf

│   ├── httpd-default.conf

│   ├── httpd-info.conf

│   ├── httpd-languages.conf

│   ├── httpd-manual.conf

│   ├── httpd-mpm.conf

│   ├── httpd-multilang-errordoc.conf

│   ├── httpd-ssl.conf

│   ├── httpd-userdir.conf

│   ├── httpd-vhosts.conf

│   └── proxy-html.conf

├── httpd.conf

├── httpd.conf.pre-update

├── magic

├── mime.types

├── original

│   ├── extra

│   │   ├── httpd-autoindex.conf

│   │   ├── httpd-dav.conf

│   │   ├── httpd-default.conf

│   │   ├── httpd-info.conf

│   │   ├── httpd-languages.conf

│   │   ├── httpd-manual.conf

│   │   ├── httpd-mpm.conf

│   │   ├── httpd-multilang-errordoc.conf

│   │   ├── httpd-ssl.conf

│   │   ├── httpd-userdir.conf

│   │   ├── httpd-vhosts.conf

│   │   └── proxy-html.conf

│   └── httpd.conf

├── other

│   └── php7.conf

└── users

    └── Guest.conf


5 directories, 31 files

nopsled@Sangui-MacBookPro:/etc/apache2 (=`ω´=)$ 


Python flask wsgi 적용하기 귀찮아서 위처럼 사용하고 있다... (이러면 안되는거 알지만.......)


아무튼 Apache 2.4.34, Apache 디렉토리에 뭐가 있는지 확인했는데 똑같으면 아래와 같이 따라하면 된다.




LoadModule proxy_html_module libexec/apache2/mod_proxy_html.so

LoadModule proxy_module libexec/apache2/mod_proxy.so

LoadModule proxy_http_module libexec/apache2/mod_proxy_http.so

# proxy module 주석을 제거 해준다.


DocumentRoot "/var/www/default"

<Directory "/var/www/default">

    Options FollowSymLinks Multiviews Indexes

    MultiviewsMatch Any

    AllowOverride all

    Require all granted

    Allow from all

</Directory>

# DocumentRoot의 default 위치 지정 (기본적으로 127.0.0.1, localhost라고 생각하면 됨)


Include /private/etc/apache2/extra/httpd-vhosts.conf

# httpd-vhosts.conf 파일을 include 시켜준다.



sudo vi /etc/apache2/httpd.conf


sudo로 httpd.conf 파일을 열어서 위와 같이 수정 및 추가한다.




<VirtualHost scope.nopsled.local:80>

    ServerAdmin scope@admin.scope.com # 아무거나 써도 된다

    ServerName scope.nopsledlocal # 아무거나 써도 된다

    ServerAlias scope.nopsled.local # 아무거나 써도 된다

    DocumentRoot "/var/www/scope" # DocumentRoot 지정

    ErrorLog "/private/var/log/apache2/scope-error.log"

    CustomLog "/private/var/log/apache2/scope-access.log" common

    <Directory /var/www/scope> # 여기서도 DocumentRoot 지정

        Allow from all

        AllowOverride All

        Require all granted

        Options Indexes FollowSymLinks MultiViews

    </Directory>


    <IfModule mod_rewrite.c>

        # mod_rewrite.c Module이 있는 경우 아래 실행

        RewriteEngine On

        # RewriteEngine 키고

        ProxyPass / http://127.0.0.1:8080/

        # /로 들어온 모든 사용자는 127.0.0.1:8080를 프록시로 사용

        ProxyPreserveHost On

        ProxyErrorOverride Off

        # Error는 override하지 않는다

    </IfModule>

</VirtualHost>


<VirtualHost 127.0.0.1:80 localhost:80>

    # 위 도메인 외에 127.0.0.1:80, localhost:80에 접속하는 사용자는 아래와 같이 포워딩한다

    ServerAdmin nopsled@localhost

    ServerName nopsled.localhost

    DocumentRoot "/var/www/default"

    ErrorLog "/private/var/log/apache2/default-error.log"

    CustomLog "/private/var/log/apache2/default-access.log" common

    <Directory /var/www/default>

        Allow from all

        Require all granted

        AllowOverride all

    </Directory>

</VirtualHost>


sudo vi /etc/apache2/extra/httpd-vhosts.conf

httpd-vhosts.conf를 sudo로 열어서 위와 같이 수정해준다.



##

# Host Database

#

# localhost is used to configure the loopback interface

# when the system is booting.  Do not change this entry.

##

127.0.0.1   localhost

255.255.255.255 broadcasthost

::1             localhost

127.0.0.1 scope.nopsled.local 


sudo vi /etc/hosts

hosts를 열어서 위와 같이 마지막에 추가해준다.


이제 열어보면 잘된다. 이렇게 했는데도 안되면 /var/log/apache2/에 있는 error.log를 참고하면서 trouble shooting하면 된다.



이 댓글을 비밀 댓글로

MongoDB 유저생성 및 데이터베이스 생성

Posted by nopsled
2019.01.08 09:52 데이터베이스

회사에서 맨날 MongoDB를 사용하고 있는데 설정한다고 구글 검색하기가 귀찮아서 따로 만들어봤다.


public으로 설정이 잘못되어 있어서 하마터면 털릴뻔했다 ㅡㅡ..


MongoDB port(27017)을 인바운드와 noauth로 열어주는 경우엔 잘못하면 털린다.


그렇다면 이 설정을 어떻게 피하냐면.. 다음과 같이 하면 된다.


몽고디비를 새로 설치한 후 초기 셋팅이라고 생각하면 된다.





1. 초기에는 authorization이 disabled 되어 있으므로 그냥 mongo 쉘 커맨드로 접속하면 된다.

mongo 



2. admin DB를 생성하여 모든 DB에 접속할 권한을 준다.

use admin
db.createUser( { user: "<username>",
          pwd: "<password>",
          roles: [ "userAdminAnyDatabase",
                   "dbAdminAnyDatabase",
                   "readWriteAnyDatabase"

] } ) 


3. 다음은 사용자가 원하는 DB를 만들때 셋팅이다. (이 경우 해당 디비에만 권한을 받는다.)

use myDB
db.createUser({ user: "<username>",
          pwd: "<password>",
          roles: ["dbAdmin", "readWrite"]

}) 


+ 사용자를 drop 시킬때 쓰는 명령이다. (거의 쓸일 없다)

use admin

db.dropUser("<username>") 





4. 몽고로 쉘 커맨드로 접속하여 나오는 버전명을 보고 케이스를 나눠서 진행한다. (솔직히 2버전대 아니면 별 의미없는것 같다.)

Case1 : MongoDB shell version v4.0.4, MongoDB server version: 4.0.4

sudo vi /etc/mongod.conf 


# mongod.conf


storage:

  dbPath: /data/db

  #dbPath: /var/lib/mongodb

  # if you want to custom MongoDB Path, modify dbPath line.

  journal:

    enabled: true


net:

   bindIp: 127.0.0.1

   port: 27017


security:

   authorization: "enabled"

   #authorization: "disabled" 

   # if you want to disable authorization, uncomment disabled line.


processManagement:

  timeZoneInfo: /usr/share/zoneinfo

   # If you use this timeZoneInfo, will be following your localtime


# where to write logging data.

systemLog:

   destination: file

   logAppend: true

   path: /var/log/mongodb/mongod.log

# If path permission has root:root, executed user(general user) can't access that file.

# Check path's permission. it followed executed permission.


Case2 : MongoDB shell version v3.6.7, MongoDB server version: 3.6.5

 sudo vi /etc/mongod.conf


# mongod.conf


# Where and how to store data.

storage:

  dbPath: /var/lib/mongodb

  journal:

    enabled: true


# where to write logging data.

systemLog:

  destination: file

  logAppend: true

  path: /var/log/mongodb/mongod.log

# If path permission has root:root, executed user(general user) can't access that file.

# Check path's permission. it followed executed permission.


# network interfaces

net:

  port: 27017

  bindIp: 127.0.0.1


# how the process runs

processManagement:

  timeZoneInfo: /usr/share/zoneinfo

   # If you use this timeZoneInfo, will be following your localtime


security:

   authorization: "enabled"

   #authorization: "disabled" 

   # if you want to disable authorization, uncomment disabled line.


이렇게 하고 robo로 접속 테스팅해본다.


참고로..bindIp를 걸어놓으면 로컬로 밖에 접속을 못하니 robo에서는 SSH 터널링을 통해 접속해야한다.


DB가 털리는 상황은 bindIp를 주석처리하고 authorization을 disabled하는 경우다. 올바른 설정을 위해선 bindIp를 걸어주거나 authorization을 enabled해준다. 둘중 하나만 설정되어 있다면 털릴 걱정 안해도 된다.



+ 참고 및 출처 : http://blog.freezner.com/archives/1040

이 댓글을 비밀 댓글로

/etc/sudoers 권한 변경 실패시

Posted by nopsled
2018.12.10 14:07 운영체제

회사 아이맥으로 mongodb를 설치하던 중 퍼미션 디나인이 떠서 sudoers를 수정했었다가 참변을 당했다.


datakingui-iMac:~ dataking$ sudo chmod 440 /etc/sudoers

sudo: /etc/sudoers is world writable

sudo: no valid sudoers sources found, quitting

sudo: unable to initialize policy plugin


sudo를 하려고 해도 sudo가 안되고 위와 같이 에러가 났다.


osascript -e 'do shell script "chown root:wheel /etc/sudoers;chmod 0440 /etc/sudoers" with administrator privileges' 


위 스크립트를 사용해서 권한을 바꿨더니 정상적으로 동작했다.

이 댓글을 비밀 댓글로

SK 아이피와 포트에 대해서

Posted by nopsled
2018.11.22 09:20 분류없음

SK broadband, sktelecom 이게 서로 다른건가보다.

 

처음에 SKB에 전화해서 여러 인증 다 거쳤는데 가입된 이름이 없다고해서 엥쓰? 했는데 알고보니 skt에서 가입하면 또 회선이 다르다고(?) 했다.. 세상에 마상에


아무튼 자꾸 공유기 아이피를 192.168.100.10(사설 아이피)로 받아오는것이였다 ㅡㅡ..


그래서 전화해서 해결했는데 모뎀에 "하향"이라는 부분이 깜빡이면 안된다고 전원 뽑으면 원격으로 뭐 해준다고 했다.


그래서 30초? 기다렸더니 됐다고 연결해보라해서 연결했더니 잘되다가 갑자기 계속 간헐적으로 끊긴다..


이거 쓰는 와중에도 계속 끊긴다... 모뎀에 인터넷하고 IPTV, 상향 불이 또 꺼졌다 ㅡㅡ 아오 화난다...


그리고 내가 서버 운영(맥북 아파치) 때문에 고정아이피는 뭐라뭐라 물어봤더니 그거 부가서비스라고 돈주고 쓰는거랜다..


기본적으로 제한하는 포트번호도 알려줬다 (21, 80, 135, 137~139, 445, 4444, 1434, 23)


근데 우리집 아이피는 80이 열려있다. 뭘까... 이해불가...


결론 : SK쓰지마세요.

이 댓글을 비밀 댓글로

Install MongoDB + phpMongoDriver in Mac OSX High Sierra

Posted by nopsled
2018.09.13 16:25 데이터베이스

 brew install mongodb 

First, you have to install mongodb.


nopsled@smleeo3o:~/dump (=`ω´=)$ php -v

PHP 7.1.7 (cli) (built: Jul 15 2017 18:08:09) ( NTS )

Copyright (c) 1997-2017 The PHP Group

Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies 



Second, check your php version. this example's php version is 7.1.


 brew tap kyslik/php

 brew install php71-mongodb


Third, we have to install php MongoDriver 7.1



nopsled@smleeo3o:~ (=`ω´=)$ cd /usr/local/Cellar/php71-mongodb/1.4.0

nopsled@smleeo3o:/usr/local/Cellar/php71-mongodb/1.4.0 (=`ω´=)$ ls

INSTALL_RECEIPT.json  mongodb.so*

nopsled@smleeo3o:/usr/local/Cellar/php71-mongodb/1.4.0 (=`ω´=)$ cp /etc/php.ini.default /etc/php.ini 


Check mongodb.so file and copy your /etc/php.ini.default to /etc/php.ini.


 878 ; ... or with a path:

 879 ;

 880 ;   extension=/path/to/extension/msql.so

 881 ;

 882     extension=/usr/local/Cellar/php71-mongodb/1.4.0/mongodb.so

 883 ; If you only provide the name of the extension, PHP will look for it in its

 884 ; default extension directory.

 885 ;

 886 ; Windows Extensions 

And you have to add mognodb.so files location in /etc/php.ini.


 nopsled@smleeo3o:/usr/local/Cellar/php71-mongodb/1.4.0 (=`ω´=)$ sudo apachectl restart

restart your apache.


이 댓글을 비밀 댓글로

중년기사김봉식 매크로

Posted by nopsled
2018.08.09 23:52 일상생활


심심해서 만든 중년기사김봉식 매크로


애초에 심심해서 혼자 쓰기 위해서 개발했다. 캡챠가 있는것도 아니라서 개발에 어려움은 없었다.


만들고나니 내가 왜 만들었지 라는 생각... 하루였던가 돌리면 10000보석 이상이었던걸로 기억한다.


동영상 스킵은 게임내에 있는 동영상 스킵 구매(과금)로 진행되는게 아닌 자체개발로 만들어졌다.


꽤 짭짤했는데 요즘은 잘 안쓰게된다.. 심심한데 또 뭐 만들꺼없나...

'일상생활' 카테고리의 다른 글

중년기사김봉식 매크로  (9) 2018.08.09
18.02.22 전역  (0) 2018.04.25
페이스북 video_xxxx.zip  (0) 2017.12.17
2017.09.12  (0) 2017.09.12
2017.06.10  (0) 2017.06.10
육군 정보보호병  (5) 2016.04.23
    • 2018.08.22 07:12
    비밀댓글입니다
    • 2018.08.23 22:19
    비밀댓글입니다
    • 영탁2
    • 2018.08.25 12:12 신고
    혹시 공유 가능하신가요??
    • 2018.09.14 00:26
    비밀댓글입니다
    • 2018.09.28 11:42
    비밀댓글입니다
    • 2018.11.17 09:01
    비밀댓글입니다
    • 꽃게탕몀
    • 2018.12.08 15:14 신고
    공유가능하신가요? dlrjswn1114@gmail.com 로 보내주세요..ㅠㅠ 사례금 주시라면 드릴스 있음
    • 2018.12.29 12:03
    비밀댓글입니다
    • 2019.01.01 23:15
    비밀댓글입니다
이 댓글을 비밀 댓글로

linux UTC to KST (also hardware time too)

Posted by nopsled
2018.06.05 10:29 운영체제

매일매일 VM 셋팅해주면 region 때문에 time이 문제다.


아시아로 맞춰주면 UTC로 변하질 않나.. rdate로 타임서버랑 싱크 맞춰도 안맞질 않나... 짜증나서 열심히 삽질하다가 올려본다.


참고로 환경은 Ubuntu 16.04 LTS다.



nopsled@vmtest:~/$ ls -al /usr/share/zoneinfo/Asia | grep Seoul

lrwxrwxrwx  1 root root    6 Nov  9  2017 Seoul -> ../ROK

nopsled@vmtest:~/$ 



위와 같이 Seoul이 있는거 확인하면 된다. 참고로 환경이 Ubuntu라 경로가 바뀔 수 있음을 알아두자.



nopsled@vmtest:~/$ ls -al /etc/localtime

lrwxrwxrwx 1 root root 30 Jun  4 18:22 /etc/localtime -> /usr/share/zoneinfo/US/Pacific

nopsled@vmtest:~/$ 


/etc/localtime이 있는지 확인



nopsled@vmtest:~/$ sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

nopsled@vmtest:~/$ ls -al /etc/localtime

lrwxrwxrwx 1 root root 30 Jun  5 10:26 /etc/localtime -> /usr/share/zoneinfo/Asia/Seoul

nopsled@vmtest:~/$ date

Tue Jun  5 10:27:11 KST 2018

nopsled@vmtest:~/$ sudo hwclock --show

Tue 05 Jun 2018 10:27:13 AM KST  .956086 seconds

nopsled@vmtest:~/$ 


파일이 root 권한이므로 sudo로 링크 다시 걸어주고 제대로 적용되었는지 /etc/localtime을 확인


마지막으로 date와 sudo hwclock --show로 하드웨어 타임과 맞는지 확인하며 끝낸다.

이 댓글을 비밀 댓글로

python pyodbc 설치 탐험기

Posted by nopsled
2018.06.04 15:59 프로그래밍

우선 환경은 Ubuntu Server 16.04 LTS이다.  (Azure)


python pyodbc를 설치하려고 하는데 자꾸 에러가 뜬다..

날 괴롭힌 에러는 다음과 같다.


error: Setup script exited with error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

위에 있는 에러가 자꾸 뜬다...


열심히 찾아봤는데 자꾸 이상한 lib들 설치하라고 난리친다.


sudo apt-get install unixodbc-dev


wget https://packages.microsoft.com/ubuntu/16.04/prod/pool/main/m/msodbcsql17/msodbcsql17_17.0.1.1-1_amd64.deb


sudo dpkg -i msodbcsql17_17.0.1.1-1_amd64.deb


pip install pyodbc


이거 하면 잘된다.


1번라인 : unixodbc develop 관련 라이브러리 설치

2번라인 : mssql odbc drvier 17 다운

3번라인 : 다운받은 데비안 패키지 설치

4번라인 : pyodbc 설치


끝..


'프로그래밍' 카테고리의 다른 글

python pyodbc 설치 탐험기  (0) 2018.06.04
[javascript] calculate datetime  (0) 2018.04.24
[javascript] get ip only using javascript  (5) 2018.04.19
python ctypes GetFileVersion  (0) 2016.11.09
python 윈도우 한글문제  (0) 2016.04.26
python unicode unescape (html unescape)  (0) 2015.11.07
이 댓글을 비밀 댓글로

[mongodb] how to find dictionary not null

Posted by nopsled
2018.04.30 18:17 데이터베이스

{

    "_id" : ObjectId("5a129bde1c6fcc3ea4d21db0"),

    "email" : "test@gmail.com",

    "name" : "test",

    "authType" : "google",

    "loc" : {

        "country" : "US"

    }

},


{

    "_id" : ObjectId("5a129bde1c6fcc3ea4d21db0"),

    "email" : "test2@gmail.com",

    "name" : "test2",

    "authType" : "google",

    "loc" : {}

},


{

    "_id" : ObjectId("5a129bde1c6fcc3ea4d21db0"),

    "email" : "test3@gmail.com",

    "name" : "test3",

    "authType" : "google",

    "loc" : {}

},


{

    "_id" : ObjectId("5a129bde1c6fcc3ea4d21db0"),

    "email" : "test4@gmail.com",

    "name" : "test4",

    "authType" : "google",

    "loc" : {

        "country" : "US"

    }

}


You have to know object's dictionary key.


If you want find loc(dictionary) not null data, using next query.


db.users.find({"loc.country":{$exists:true}}) 



debug result

{

    "_id" : ObjectId("5a129bde1c6fcc3ea4d21db0"),

    "email" : "test@gmail.com",

    "name" : "test",

    "authType" : "google",

    "loc" : {

        "country" : "US"

    }

},

{

    "_id" : ObjectId("5a129bde1c6fcc3ea4d21db0"),

    "email" : "test4@gmail.com",

    "name" : "test4",

    "authType" : "google",

    "loc" : {

        "country" : "US"

    }

}


이 댓글을 비밀 댓글로

crontab checker

Posted by nopsled
2018.04.26 18:13 운영체제

직장에서 crontab을 이렇게 열심히 쓸줄은 몰랐다.


심심해서 crontab checker 만들려고 했는데 누가 만들어놨다... 그것도 온라인으로.....


https://crontab.guru/

위 링크에서 cron command 만들고 


http://cron.schlitt.info/


위에서 테스트하면 확실하게 알 수 있다.

'운영체제' 카테고리의 다른 글

/etc/sudoers 권한 변경 실패시  (0) 2018.12.10
linux UTC to KST (also hardware time too)  (0) 2018.06.05
crontab checker  (0) 2018.04.26
ssh process continue after logout  (0) 2018.04.19
Mac high sierra apache connection refused error  (0) 2018.01.08
ssh process continuation  (0) 2015.10.10
이 댓글을 비밀 댓글로