apache 설정에서 proxy를 사용하기 위해서 mod_proxy 와 관련된 몇가지 so파일들을 컴파일 하는 방법에 대해 정리해 드리겠습니다.

별로 어렵지 않으니 따라하시다 보면 /modules/ 안에 mod_proxy.so파일이 생성된걸 확인하실수 있으실거예요.

apache mod_proxy.so 컴파일 방법

1) /apache/httpd-2.2.34/modules/proxy 해당 경로 이동

2) 아래 4개 컴파일 수행 (apache-2.2.34 설치된곳 경로지정)

/apache/apache-2.2.34/bin/apxs -i -a -c mod_proxy.c proxy_util.c

/apache/apache-2.2.34bin/apxs -i -a -c mod_proxy_http.c proxy_util.c

/apache/apache-2.2.34bin/apxs -i -a -c mod_proxy_connect.c proxy_util.c

/apache/apache-2.2.34/bin/apxs -i -a -c mod_proxy_ajp.c proxy_util.c ajp_header.c ajp_utils.c ajp_link.c ajp_msg.c

3) /apache/apache-2.2.34/modules 경로에 proxy 관련 파일 생성 확인 (4개)

mod_proxy_ajp.so
mod_proxy_connect.so
mod_proxy_http.so
mod_proxy.so

4) httpd.conf 에 삽입

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so

위처럼 하시면 일단 apache 에서 proxy를 사용하기 위핸 최소 조건인 mod_proxy.so파일의 설정이 완료된것입니다.

그럼 열공하세요..^^~

출처 : https://m.blog.naver.com/kletgdgo/90141426279

[root@localhost bin]# ./httpd -t

httpd: Syntax error on line 150 of /usr/local/apache/conf/httpd.conf: Cannot load modules/libphp5.so into server: /usr/local/apache/modules/libphp5.so: undefined symbol: unixd_config

아파치 시동시에 위와 같은 에러가 뜬다.

버전정보는

Server version: Apache/2.4.53 (Unix)
PHP 5.2.17 (cli)

보통 위 에러는 apache2와 php4.x로 컴파일 할때에 생기는 오류지만 apache2.4와 php5.2에서도 발생이 되기도 한다.
php압축해제경로/sapi/apache2handler/에서 php_functions.c 파일을 일부 수정한다.
 
[PHP 5.2.17 의 경우]

>line 386

#if !defined(WIN32) && !defined(WINNT) && !defined(NETWARE)
        AP_DECLARE_DATA extern unixd_config_rec ap_unixd_config;
#endif

 

>line 417

#if !defined(WIN32) && !defined(WINNT) && !defined(NETWARE)
        snprintf(tmp, sizeof(tmp), "%s(%d)/%d", ap_unixd_config.user_name, ap_unixd_config.user_id, ap_unixd_config.group_id);
        php_info_print_table_row(2, "User/Group", tmp);
#endif

 

재 컴파일 후 Syntax 테스트

[root@localhost bin]# ./httpd -t
Syntax OK

[PHP 4.4.8 의 경우]

php4소스파일에서 아래 경로의 파일을 수정해야합니다.

/sapi/apache2handler/php_functions.c

붉게 표시된 부분을 기존 unixd_config -> ap_unixd_config로 수정

373라인
AP_DECLARE_DATA extern unixd_config_rec unixd_config;

404라인
snprintf(tmp, sizeof(tmp), "%s(%d)/%d", unixd_config.user_name, unixd_config.user_id, unixd_config.group_id);

ap_get_server_version -> ap_get_server_banner로 수정

327라인
return (char *) ap_get_server_version();

수정 후 에 재 컴파일

출처 : https://rootrator.tistory.com/112

 

apache 시동시 에러 "undefined symbol: unixd_config"

[root@localhost bin]# ./httpd -thttpd: Syntax error on line 150 of /usr/local/apache/conf/httpd.conf: Cannot load modules/libphp5.so into server: /usr/local/apache/modules/libphp5.so: undefined symbol: unixd_config 아파치 시동시에 위와 같은 에

rootrator.tistory.com

출처 : https://darksharavim.tistory.com/333

 

[PHP]libphp4.so: undefined symbol 오류

환경 : centos7+apache2.4.6(RPM)+php4.4.9(src) 위 환경에서 아파치 구동시 아래와 같이 오류가 발생하여 확인해본 결과 libphp4.so: undefined symbol: unixd_config libphp4.so: undefined symbol: ap_get_server_version apache버전업

darksharavim.tistory.com

 

프로젝트를 진행하면서 특정폴더 안에 있는 파일리스트가 필요한 상황이었는데

DOS 명령어중 dir 명령어에 옵션을 넣어 사용하면 쉽게 파일 리스트를 텍스트 파일로 저장할 수 있습니다.

dir/b

dir 명령어에 /b 옵션을 붙이면  아래와 같이 파일명들만 출력됩니다.

dir/b 명령 결과

dir/b/s

여기에 /s 옵션을 더해주면 파일의 full 경로가 아래처럼 출력됩니다.

dir/b/s 명령 결과

이제 여기서 화면에 출력된 내용을 텍스트 파일로만 저장하면 됩니다.

방법은 > 기호를 사용하여 파일로 저장할 수 있습니다.

위와 같은 명령어를 실행하면 FileList.txt 파일로  파일리스트가 아래와 같이 저장됩니다.

참 쉽죠? ^^

 

ssh 로그인할때 로그인이 느려지는 현상
로그인을 할때 로그를 보면
john dbus[7254]: [system] Failed to activate service 'org.freedesktop.login1': timed out

로그인 timed out 이 뜨면서 계속 지연이 발생이 된다. 이걸 해결하기 위해서는
# systemctl restart systemd-logind
위 명령어를 입력해서 재구동 해주면 정상적으로 빠르게 로그인이 된다.

출처 : https://algo79.tistory.com/1277

 

우리는 대체로 이렇게 생각한다.

ctime : create time , mtime = modify time , atime = access time 이라고 생각한다. 

하지만 이렇게 생각하면 안된다.

ctime : 파일이나 inode 값이 바뀐 시점이다. 다시말해 속성값이 바뀐시점이다. 퍼미션이나 소유주, 파일크기 등 파일 속성값이 변경되었을 때 ctime 은 갱신된다.

mtime : 파일의 수정시간이다. 이는 속성이 아닌 파일의 내용이 바뀌었을때 이 값이 바뀐다. 주의할 것은 파일 내용이 바뀌면 파일의 크기가 달라진다. 이때 파일의 크기가 속성이므로 ctime도 갱신된다. 만약 파일 내용을 수정했는데 파일 크기가 바뀌지 않았을수 있다. 이때는 ctime이 바뀌지 않을까? 파일이 수정되면 mtime 이 바뀐다. mtime 은 파일의 속성이다. 때문에 ctime이 바뀐다.

** mtime은 대체로 ctime 과 같다. mtime이 갱신되면 ctime도 갱신된다. 하지만 ctime이 변경된다고 mtime이 변경되지는 않는다.

atime : 파일을 오픈하면 atime이 갱신된다. grep , sort, cat 등등 명령을 주거나 open() 함수로 열었을때 

파일의 ctime, mtime, atime을 쉘에서 ls로 확인법

ls의 옵션으로 -u 는 atime, -c는 ctime,  옵션이 없다면 mtime을 출력한다.

-u 와 -c 는 동시에 사용될 수 없다.

아래 포스팅을 참조하면 도움이 된다.

https://mapoo.net/os/oslinux/find%eb%a1%9c-%ea%b2%80%ec%83%89%ec%8b%9c-%ec%98%b5%ec%85%98%ec%9d%98-atime-ctime-mtime%ea%b3%bc-%ec%a1%b0%ed%95%a9%eb%90%98%eb%8a%94-%ec%8b%9c%ea%b0%84-%ea%b8%b0%ec%a4%80%ed%91%9c/

 

find로 검색시 옵션의 atime, ctime, mtime과 조합되는 시간 기준표 – mapoo's blog

-atime +n/-n/n 엑세스 시점으로 검색. cat, sort, open() 등을 하였을 때 -ctime +n/-n/n 파일의 속성값이 바뀐 시점으로 검색. (권한,inode,소유주 등) -mtime +n/-n/n 파일의 내용이 바뀐 시점으로 검색. 파일의 크

mapoo.net

 

출처 : https://mapoo.net/os/oslinux/%eb%a6%ac%eb%88%85%ec%8a%a4-ctime-mtime-atime-%eb%8b%a4%eb%a5%b8-%ec%a0%90-%ec%84%a4%eb%aa%85/

아래처럼 파이프로 넘겨서 간단하게 확인이 가능 합니다.

whois 주소 | iconv -f utf-8 -t euc-kr

가능하면 새로 설치하는것은 utf-8로 하는것이 좋겠습니다.

하지만 이전 시스템이 euc-kr 이라면 위와 같은 방법으로 한글 확인 하는데 조금 신경을 써 주셔야 합니다.

아래와 같은 방법으로 인코딩을 변경하는 방법도 있습니다.

LANG="ko_KR.eucKR"; /usr/bin/locale
LANG="ko_KR.UTF-8"; /usr/bin/locale

앨리어스를 줘서 전환을 쉽게 하는 방법을 사용해 보는것도 좋겠습니다.

/usr/bin/locale

명령은 설정하는것이 아니라 현재것 확인하는것입니다.

 

출처 : https://chamsora.tistory.com/3

리눅스를 이용해 서버를 운영하다 보면 버퍼/캐시가 쌓여 메모리를 점유하는 것을 top 또는 free -m 명령어로 확인할 수 있는데요.

버퍼와 캐시 메모리는 자주 사용하는 파일 내용이나 파일 위치등을 저장하기 때문에 캐시로 저장되어 있으면 디스크의 I/O를 줄여서 퍼포먼스를 빠르게 유지할 수 있는 장점이 있지만 장착된 램의 용량이 부족한 경우 스왑을 사용할 수도 있기 때문에 간헐적으로 메모리를 많이 사용하는 타이밍에는 성능 저하로 연결되게 됩니다.

이럴때 주기적으로 캐시 메모리를 비워 서버를 관리할 수 있습니다.

캐시 메모리 비우기

캐시 메모리를 비우기 위해서 /proc/sys/vm/drop_caches 를 사용합니다. 경로 때문에 파일 처럼 보이지만 바이너리 명령어로 다음과 같이 사용할 수 있습니다.

sync

echo 1 > /proc/sys/vm/drop_caches

echo 2 > /proc/sys/vm/drop_caches

echo 3 > /proc/sys/vm/drop_caches

메모리를 비우기 전 sync 명령어로 메모리에 올라간 데이터를 디스크로 옮겨줍니다. 이 과정을 거치지 않으면 흡사 프로그램을 강제 종료한 것 처럼 데이터가 유실될 수도 있습니다.

/proc/sys/vm/drop_caches 명령어는 위 처럼 3단계로 사용할 수 있는데 1은 Page Cache 비우기, 2는 dentries, inodes 비우기, 3은 모두 비우는 명령어 입니다.

페이지 캐시는 파일의 내용을 메모리에 올리는 구조이고 dentries는 데이터의 위치(directory Entry) , inodes는 파일과 디렉토리의 정보를 담고 있는 자료 구조를 담당합니다.

자동으로 캐시 메모리 비우기

위 명령어로 관리자가 수동으로 캐시 메모리를 비울 수 있지만 만일 주기적으로 캐시를 삭제하고 싶은 경우에는 크론탭(crontab)에 명령어를 등록할 수 있습니다.

0 7 * * 0 sync && echo 3 > /proc/sys/vm/drop_caches # 매일 오전 7시에 캐시 비우기
0 * * * * sync && echo 3 > /proc/sys/vm/drop_caches # 매 시간 캐시 비우기

crontab -e 명령어로 크론탭을 실행한 다음 맨 마지막 줄에 위 명령어 둘 중 하나를 추가한 다음 저장합니다.

출처 : https://extrememanual.net/29711#%EC%9E%90%EB%8F%99%EC%9C%BC%EB%A1%9C_%EC%BA%90%EC%8B%9C_%EB%A9%94%EB%AA%A8%EB%A6%AC_%EB%B9%84%EC%9A%B0%EA%B8%B0

 1.  mod_unique_id module 추가
    기본적으로 mod_unique_id 모듈을 apache install 시 설치해야되나 빠져있다면
    apache source를 다운받아서 해당 모듈만 복사한다.
   
    # cd /usr/local/src
    # wget http://mirror.apache-kr.org/httpd/httpd-2.2.27.tar.gz
    # tar xvfz httpd-2.2.27.tar.gz
    # cd httpd-2.2.27/modules/metadata
    # /usr/local/apache/bin/apxs -cia mod_unique_id.c
    # /etc/rc.d/init.d/httpd restart (/usr/local/apache/bin/apachectl restart)

2. 컴파일전 설치되어야할 라이브러리들이 다 설치되어 있는지 확인한다.
   https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#Installation_for_Apache
   해당 사이트를 참고

3. 컴파일
   # ./autogen.sh
   #./configure \
    --with-apxs=/usr/local/apache/bin/apxs \
    --with-libxml=/usr \
    --with-apr=/usr/local/apache/bin/apr-1-config \
    --with-apu=/usr/local/apache/bin/apu-1-config
   # make
   # make install

4. https://www.owasp.org/index.php/Category:OWASP_ModSecurity_Core_Rule_Set_Project 에서 최근 롤셋을 다운
   INSTALL text 파일안 설명대로 설치
   krcert.or.kr 에서 제공하는 룰셋은 오래전 룰셋이라 OWASP에서 제공하는 룰셋으로 셋팅한다.

5. httpd.conf 에 아래 내용 추가

   LoadModule unique_id_module   modules/mod_unique_id.so
   LoadFile  /usr/lib64/libxml2.so
   LoadFile  /usr/lib64/liblua-5.1.so
   LoadModule security2_module    modules/mod_security2.so

    <IfModule security2_module>
       Include conf/crs/modsecurity_crs_10_setup.conf
       Include conf/crs/activated_rules/*.conf
    </IfModule>

6. crs/activated_rules 디렉토리의 modsecurity_crs_10_setup.conf 심볼릭 링크 삭제
   httpd.conf 에 include되는 modsecurity_crs_10_setup.conf 파일을 아래 activated_rules/*.conf 으로 모든 파일을
   불러오는데 modsecurity_crs_10_setup.conf이 2번 불려오게 되서 apache error_log에
   ModSecurity: Found another rule with the same id 에러가 발생하게 된다.
   Include conf/crs/activated_rules/*.conf 만 하던지 심볼릭 링크를 삭제하던지 2번 불려지지 않게 한다.

7. httpd restart

8. www.your-domain.com/?foo=/etc/passwd 해서 apache error_log에 ModSecurity: Access denied.....이런 메세지가 나오면
   제대로 작동하는것이다.

9. 개발서버 IP로 접속이 안되면  modsecurity_crs_21_protocol_anomalies.conf 파일의 98번 라인을 주석처리하여 롤을
   없앤다.
   error_log를 보면 어떤 롤파일의 몇번째 롤 때문에 오류가 나는지 나오므로 그걸보고 하나씩 롤을 수정하면 된다.

출처 : https://kkamagistory.tistory.com/532

가끔 크롬 브라우저를 통해 인터넷 검색을 하다 보면, 특정 사이트 페이지에 'http error 400' 오류 문구가 노출되면서, 페이지가 열리지 않을 때가 있습니다. 오늘 이러한 http error 400 오류에 대처하여 해결하는 방법을 간단하게 알려드리니, 참고 바랍니다.

이러한 http error 400 오류는 쉽게 얘기하여, 브라우저 cookie가 충돌을 일으켜서 발생하는 오류인데요. 열림을 원하는 특정 사이트의 누적된 cookie와의 문제로 인해서 발생한 것이기 때문에, 해당 cookie를 삭제하면 해결이 됩니다.

즉, 오늘의 내용은, 크롬 브라우저에서 특정 사이트의 cookie를 지우는 창을 찾아, http error 400 오류를 해결하는 것이 주목적입니다. 해당 크롬 브라우저의 메뉴 위치만 확인하면 해결이 되는 아주 간단한 방법입니다.

http error 400 해결 방법

1. 크롬 브라우저의 설정 메뉴로 이동

  • 크롬 브라우저 우측 상단 모서리에 '전체 메뉴(:)' 클릭
  • 펼침 메뉴에서 '설정' 클릭

 

2. 쿠키 및 기타 사이트 데이터 메뉴 클릭

  • 설정 - '보안 및 개인정보 보호 클릭.
  • 펼침 메뉴에서 '쿠키 및 기타 사이트 데이터' 메뉴 클릭

 

3. '모든 쿠키 및 사이트 데이터 보기' 메뉴 클릭

 

4. 차단된 사이트의 쿠키 선별

  • 우측 검색란에 차단된 '특정 사이트 도메인' 입력 (사진 참조)

 

5. 해당 사이트 쿠키 데이터 삭제

  • 특정 사이트의 모든 쿠키를 삭제하려면 우측 상단 '표시된 항목 모두 삭제'
  • 선택하여 삭제를 원하시면, 쿠키를 선별하여 삭제 가능

 

6. http error 400 문제 해결

  • 크롬 브라우저 주소란에 해당 사이트명 입력 후 접속 확인
  • (저의 경우 tistory.com 페이지가 차단되었었는데요! 해결)

 

이상 http error 400 크롬 브라우저 접속 오류 해결방법에 대한 정보를 정리하여 드렸습니다. 실제 오류를 해결하는데 드는 시간은 1분도 안 걸릴 정도로 매우 간단합니다.

출처 : https://hongejae.tistory.com/entry/http-error-400-%ED%81%AC%EB%A1%AC-%EC%98%A4%EB%A5%98-%EA%B0%84%EB%8B%A8-%ED%95%B4%EA%B2%B0%EB%B0%A9%EB%B2%95

'Works > Network' 카테고리의 다른 글

100Mbps, MB/s로 변환 방법 및 변환한 속도  (0) 2018.04.25
통신사별 DNS 서버 정리  (0) 2017.04.21
서버호스팅 트래픽 계산  (0) 2016.11.08
랜선 만들기 (Direct & Cross Cable)  (0) 2016.07.07

* login shell & non-login shell 이란

/etc/profile, ~/.bash_profile, ~/.bashrc, /etc/bashrc 파일들은 장치 관리 및 사용자 환경을 위한 설정 파일입니다.

위 파일들의 차이점을 알기 위해선 먼저 login shell과 non-login shell을 알아야 합니다.

 ·  login shell : 처음 리눅스를 부팅하고 터미널을 켰을 경우 특정 shell로 접속이 되면 login shell.

 ·  non-login shell : 터미널을 켰을 때 특정 shell로 들어가지 않고 직접 sh 등의 명령어로 특정 shell에 들어가야 할 경우 non-login shell.

=> 예를 들어 새로운 환경변수를 설정할 때 non-login shell 일 경우 .bashrc 파일을 이용해야 합니다.

 

* login shell (profile)

시스템에 로그인하면 login shell로 동작한다고 보면 됩니다. 기본 로그인 쉘인 bash는 login shell로 동작할 때 profile을 읽습니다.

/etc/profile은 /etc/profile.d 디렉토리 안에 존재하는 모든 쉘 스크립트를 실행시는 역할을 합니다.
/etc/profile.d 디렉토리에는 vim, qt, lang, colorls 등 다양한 설정이 sh 파일 형태로 존재하고 최초 로그인 시 /etc/profile을 통해 실행됩니다. (로그인 시 /etc/profile을 먼저 읽고 이후 홈디렉토리의 ~/.profile을 읽음)

 

· 실행 순서

   1. /etc/profile
   2. ~/.bash_profile    or    ~/.bash_login    or    ~/.profile
   3. ~/.bashrc
   4. /etc/bashrc

 

/etc/profile 과 .profile은 shell이 bash 쉘이 아니라도 로그인 시 적용되고, 

.bashrc와 .bash_login, .bash_profile은 bash 쉘로 로그인 되었을 경우만 적용이 됩니다.

리눅스의 기본 로그인 쉘은 bash 쉘로 bashrc는 bash 쉘에서 사용하는 run command 라는 의미를 가집니다. 
사용자가 임의로 로그인 쉘을 변경할 경우 변경한 쉘에 맞는 cshrc, tcshrc, kshrc 파일이 bashrc와 같은 역할을 합니다.

/etc/profile 과 .profile은 shell이 bash가 아니라도 로그인하면 로드되어 적용되고,

.bashrc 와 .bash_login, .bash_profile은 bash shell로 로그인 되었을 경우만 적용이 됩니다.

 

- /etc/profile

: 시스템 전역(모든 사용자)에 대한 환경설정 파일. 로그인시 설정 내용을 읽어들임. 시스템 전반적인 환경값들을 설정.

- ~/.bash_profile

: 개인 사용자에 대한 환경설정 파일. 로그인시 설정 내용을 읽어들임. 각 사용자 환경에 맞는 설정.

 

bashrc 파일을 수정해도 로그인 할 때 반영되는 이유는 /etc/profile이 /etc/bashrc 파일을 읽어오고

~/.profile이 ~/.bashrc 파일을 읽어오도록 구현되어 있기 때문입니다.

=> 환경 설정은 profile 파일에 alias 및 함수 설정은 bashrc 파일 저장하는 것을 권장하고 있습니다.

 

* interactive (rc file)

bash가 아닌 다른 shell에서 bash를 호출할 때 interactive로 동작합니다. 이 때 bash는 rc file을 읽습니다.

bashrc 파일은 bash가 수행될 때 실행되는 함수를 제어하는 지역적인 시스템 설정과 관련된 파일입니다. 

 

- /etc/bashrc

: 시스템 전역(모든 사용자)에 대한 환경설정 파일. 새로운 bash가 실행될 때 마다 내용을 읽어들임.

- ~/.bashrc

: 개인 사용자에 대한 환경설정 파일. bash가 실행될 때 마다 내용을 읽어들임.

 

/etc/profile은 부팅후에 적용되며

~/.bash_profile은 재로그인 하면 적용되나

source 명령어를 이용하여 바로 적용할 수 있습니다.

출처 : https://coding-chobo.tistory.com/72