Nginx 에서 KeepAlive 관련된 설정은 다음과 같이 세가지이다. keepalive_disable keepalive_timeout keepalive_requests 먼저, Keepalive 는 HTTP 와 TCP 상에서 구현되어 있다. HTTP 의 경우에는 1.0 버전과 1.1 버전이 존재하는데, 1.0 버전에서는 KeepAlive 는 존재하지 않으며 1.1 에서는 연결시에 기본으로 KeepAlive 가 활성화 된다. HTTP 는 “Connetionless” 방법을 취한다. 웹 컨텐츠를 전송 받기 위해서 서버에 연결을 한 후에 데이터를 전송받는다. 그리고는 연결을 바로 끊게 된다. 하지만 웹이라는게 HTML, Javascript, CSS, Image 파일등으로 수백개로 이루어진 상태에서 수백의 컨텐츠를 전송하기위해서 연결을 수백번을 한다면 비 […]
top 사용시 command 매칭된것만 보기.
top 은 리눅스에서 아주 유용한 시스템 모니터링 툴 입니다. 매우 많은 옵션도 제공하는데, 그중에서 프로세스의 명령어와 매칭되는 것만 보여주기도 한다. -c 옵션이 그것인데, 다음과 같이 pgrep 과 조합해서 사용할 수 있다.
|
1 |
top -c -p $(pgrep -d',' -f 매칭할스트링) -H |
CentOS 7 싱글모드 부팅
CentOS 7 에서 많은 변화가 있지만 그 중에 하나가 싱글 모드(Single Mode) 부팅 입니다. CentOS 6 에서 싱글모드 부팅을 위해서 부팅 커널 이미지 옵션으로 1 을 입력하면 되었습니다. 하지만 CentOS 7 에서는 그렇게하면 안됩니다. 이 문서는 CentOS 7 싱글모드 부팅 을 어떻게 하는지에 대한 글 입니다. 1. 싱글모드 부팅 (Single Mode Booting) CentOS 7 에서는 부팅 매니저가 Grub2 로 변경 되었습니다. Grub2 부팅 매니저가 나오면 ‘e’ 를 클릭해서 부팅 커널 이미지를 선택 합니다. 그러면 선택한 커널 이미지에 대한 Grub2 의 […]
Bash History 를 Syslog 에 남기기
Bash 쉘은 명령어 히스토리 기능을 제공 합니다. history 명령어를 입력하면 지금까지 사용했던 Bash 명령어들이 모두 보여 줍니다. 이러한 기능은 사용자 홈 디렉토리에 ‘.bash_history’ 파일에 기록되어 집니다. 그러나 여러 사람이 사용하는 서버에서 각 사용자 홈 디렉토리에 히스토리를 남기기 보다는 리눅스의 syslog 에 남기게 함으로써 사용자가 못된 일을 하는지 않하는지를 감시하도록 하면 좋을 것입니다. 이 문서는 Bash History 를 Syslog 에 남기기 에 대한 것입니다. 1. logger 를 이용한 방법 logger 는 쉘 명령어를 syslog 에 적도록하는 모듈 입니다. 이를 이용하면 수동으로 […]
CentOS 7 에서 네트워크 인터페이스 이름 바꾸기
CentOS 7 은 많은 변화가 있었지만 그중 하나가 네트워크 인터페이스 이름 입니다. 지금까지 네트워크 인터페이스 이름은 eth0, eth1 식으로 고정되어 있었습니다. 하지만 CentOS 7 부터는 바이오스 장치 이름을 조합해서 생성됩니다. 다시 말해서 각 서버마다 네트워크 인터페이스 카드가 모두 동일하다고 할지라도 CentOS 7 에서의 네트워크 인터페이스 이름은 모두 다를 수가 있다는 겁니다. 이 문서는 CentOS 7 에서 네트워크 인터페이스 이름 바꾸기 에 대한 것입니다. 1. 상태확인 CentOS 7 에서의 네트워크 인터페이스 이름은 다음과 같습니다.
|
1 2 3 4 5 6 7 8 9 |
]# ifconfig enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.0.105 netmask 255.255.255.0 broadcast 192.168.0.255 inet6 fe80::a00:27ff:fe97:3935 prefixlen 64 scopeid 0x20<link> ether 08:00:27:97:39:35 txqueuelen 1000 (Ethernet) RX packets 37862 bytes 29870696 (28.4 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 6939 bytes 513516 (501.4 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 |
enp0s3 으로 나옵니다. 네트워크 인터페이스 설정 […]
Nginx Gzip Compression 설정
HTTP 에서도 압축전송을 지원 합니다. 이는 Header 에 압축에 대한 정보가 다음과 같이 담깁니다. Nginx Gzip Compression 설정 은 다음과같이 하시면 됩니다.
|
1 |
Content-Encoding: gzip |
압축전송을 하게되면 트래픽을 줄일 수 있어, 서버 호스팅을 이용하는 분들에게는 큰 도움이 됩니다. 사용법은 다음과 같습니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# gzip compression 켜기 gzip on; # 파일을 압축하기 위한 최소 파일 크기 gzip_min_length 1100; # gzip 버퍼 크기, 4 32k 면 대부분 상황에서 적당한 크기 입니다. gzip_buffers 4 32k; # 압축을 적용할 파일타입. 파일타입은 MIME 타입을 말함. gzip_types text/plain application/x-javascript text/xml text/css; # 헤더 응답에 "Vary: Accept-Encoding" 리턴. gzip_vary on; # 압축률 지정. 1 ~ 9 사이이며 9가 최고등급의 압축. gzip_comp_level 9; # 압축을 사용하기 위해서 클라이언트에게 HTTP 1.1 사용하도록 요구함. gzip_http_version 1.1; |
잘 동작하는지 다음과 같이 테스트를 할 수 있습니다.
|
1 2 3 4 5 6 7 8 9 10 11 |
curl --header "Accept-Encoding: gzip,deflate,sdch" -I http://linux.systemv.pe.kr HTTP/1.1 200 OK Server: nginx/1.6.1 Date: Mon, 03 Nov 2014 14:22:28 GMT Content-Type: text/html; charset=UTF-8 Connection: keep-alive Keep-Alive: timeout=5 Vary: Accept-Encoding X-Powered-By: PHP/5.3.3 X-Pingback: http://linux.systemv.pe.kr/xmlrpc.php Content-Encoding: gzip |
“Content-Encoding: gzip” 이 보이면 정상으로 설정이 된 것 입니다.
smartctl을 이용한 하드디스크 진단
컴퓨터에서 디스크의 의미는 매우 중요합니다. 사람의 데이터를 영구적으로 보관해야 할 의무를 가지 때문이지요. 이러한 디스크에 문제가 발생한다면 데이터를 영구적으로 잃을 수도 있고 오늘과 같이 IT 를 기반으로 사회가 움직이는 마당에 그러한 일이 발생한다면 큰 금전적인 손실을 입을 수도 있습니다. 이렇게 중요한 디스크의 문제나 오류를 차단하기 위해서는 주기적으로 점검을 해야할 필요가 있는데, 리눅스 시스템에서는 이러한 유용한 도구를 제공 합니다. smartctl smartctl 도구는 S.M.A.R.T. (Self-Monitoring, Analysis, and Reporting Technology) 기능이 탑재된 하드디스크를 점검하는 도구 입니다. 사실상 S.M.A.R.T 의 기능을 이용하는 도구이다보니 이 […]
iptable 의 hashlimit 를 이용한 접속 제한
보통 DDOS 공격과 같은 경우에 초당 몇 십개에서 몇백번건의 접속을 시도 합니다. 이러한 초당 수백건의 접속을 이용해서 iptables 의 hashlimit 를 이용한 접속 제한을 할 수 있습니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
hashlimit match options --hashlimit-upto max average match rate [Packets per second unless followed by /sec /minute /hour /day postfixes] –hashlimit-above min average match rate –hashlimit-mode mode is a comma-separated list of dstip,srcip,dstport,srcport (or none) –hashlimit-srcmask source address grouping prefix length –hashlimit-dstmask destination address grouping prefix length –hashlimit-name name for /proc/net/ipt_hashlimit –hashlimit-burst number to match in a burst, default 5 –hashlimit-htable-size number of hashtable buckets –hashlimit-htable-max number of hashtable entries –hashlimit-htable-gcinterval interval between garbage collection runs –hashlimit-htable-expire after which time are idle entries expired? |
예를들어 초당 20번 이상 접속을 시도하는 것을 차단하고 싶다면 다음과 같이 지정하면 됩니다.
|
1 |
-m hashlimit --hashlimit-name dnsudplimit --hashlimit-above 20/second --hashlimit-mode srcip --hashlimit-burst 100 --hashlimit-srcmask 24 --hashlimit-htable-expire 3600 -j DROP |
이 차단은 약 1시간 동안 유지됩니다.
CentOS IPv6 비활성화
IPv4 의 부족분을 대체하기 위해서 IPv6 가 개발되었지만 아직까지 사용빈도가 높지않아 리눅스 IPv6 비활성화 시켜서 자원을 아낄 수 있습니다. 기본적으로 CentOS 6, 7 에서는 IPv6 가 활성화 되어 있습니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# 소켓 리스닝 상태 netstat -lpn Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1550/rpcbind tcp 0 0 0.0.0.0:39698 0.0.0.0:* LISTEN 1568/rpc.statd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1622/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1698/master tcp 0 0 :::111 :::* LISTEN 1550/rpcbind tcp 0 0 :::22 :::* LISTEN 1622/sshd tcp 0 0 ::1:25 :::* LISTEN 1698/master tcp 0 0 :::57468 :::* LISTEN 1568/rpc.statd udp 0 0 0.0.0.0:877 0.0.0.0:* 1550/rpcbind udp 0 0 0.0.0.0:111 0.0.0.0:* 1550/rpcbind udp 0 0 0.0.0.0:896 0.0.0.0:* 1568/rpc.statd udp 0 0 0.0.0.0:46387 0.0.0.0:* 1568/rpc.statd udp 0 0 0.0.0.0:68 0.0.0.0:* 1462/dhclient udp 0 0 :::877 :::* 1550/rpcbind udp 0 0 :::111 :::* 1550/rpcbind udp 0 0 :::46198 :::* 1568/rpc.statd # 커널 모듈 상태 lsmod | grep ipv6 nf_conntrack_ipv6 8337 2 nf_defrag_ipv6 11156 1 nf_conntrack_ipv6 nf_conntrack 79758 7 xt_conntrack,ipt_MASQUERADE,iptable_nat,nf_nat,nf_conntrack_ipv4,nf_conntrack_ipv6,xt_state ipv6 318183 153 ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6 |
위와같이 IPv6 가 사용 됩니다. CentOS 6 1. IPv6 커널 모듈 비활성화 다음과 같이 IPv6 커널 모듈이 로딩되지 않도록 해줍니다.
|
1 |
echo "install ipv6 /bin/true" > /etc/modprobe.d/disable_ipv6.conf |
2. 커널 파라메터 추가 다음과 같이 IPv6 커널 파라메터를 추가해 줍니다.
|
1 2 |
echo "net.ipv6.conf.default.disable_ipv6=1" >> /etc/sysctl.conf echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf |
이제 재부팅을 해주면 IPv6 가 비활성화 됩니다. CentOS 7 1. Grub2 IPv6 비활성화 옵션 추가
|
1 2 3 4 5 6 7 8 |
# vim /etc/default/grub GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="ipv6.disable=1 vconsole.font=latarcyrheb-sun16 vconsole.keymap=ko crashkernel=auto rhgb quiet" GRUB_DISABLE_RECOVERY="true" |
이와같이 […]