>  기사  >  php教程  >  램프 아키텍처

램프 아키텍처

高洛峰
高洛峰원래의
2016-12-01 13:41:371452검색

1. Apache 프로세스 모드 설명

Linux에서는 httpd-l을 사용하여 설치된 모듈이 프리포크 모드인지 워커 모드인지 확인할 수 있습니다

[root@LAMP ~]# / usl /local/apache/bin/apachectl -l|egrep "worker|prefoker"

Worker.c

[root@LAMP ~]#

또는

[root@LAMP ~]# /usr/local/apache/bin/apachectl -l |sed -n '/worker|prefork/p'

Worker.c

[ root @LAMP ~]#

prefork 모드(기본값)

Prefork는 여러 하위 프로세스를 사용하며 각 하위 프로세스에는 하나의 스레드만 있습니다.

작동 원리:

제어 프로세스는 처음에 여러 하위 프로세스를 설정하여 요청이 들어올 때 하위 프로세스를 재생성하지 않으려면 수요에 따라 새로운 하위 프로세스를 지속적으로 생성해야 합니다. 필요가 충족될 때까지 초당 최대 32개의 하위 프로세스에 도달할 수 있습니다.

작업자 모드(기본값)

작업자 모드는 Apache2.x에 새로 도입된 모드입니다. 작업자 모드에는 여러 하위 프로세스가 있습니다. 각 하위 프로세스에는 여러 스레드가 있습니다. 각 스레드는 특정 시간에 하나의 연결만 유지할 수 있습니다.

작동 원리:

기본 제어 프로세스는 여러 하위 프로세스를 생성하며 각 하위 프로세스에는 고정된 수의 스레드가 포함되어 있습니다. 또한 요청을 생성하지 않기 위해 독립적으로 처리합니다. 요청이 오면 다른 하나. 스레드, 기존 하위 프로세스의 총 스레드 수가 동시 부하를 충족할 수 없는 경우 모든 하위 프로세스의 최소 및 최대 스레드 수와 전체 스레드 수가 설정됩니다. , 제어 프로세스는 새로운 하위 프로세스를 생성합니다.

설치 방법:

구성 및 컴파일 프로세스 중에 --with-mpm=worker 매개변수를 추가하지 않으면 시스템은 기본 프리포크 모드를 채택합니다

장점 : 프리포크 모드보다 메모리 사용량이 적고, 동시성 및 트래픽이 많은 HTTPD 서비스에 적합합니다.

단점: 스레드가 충돌하면 전체 프로세스가 해당 스레드와 함께 "죽게" 됩니다. 스레드는 메모리 공간을 공유하므로 프로그램은 실행 중일 때 시스템에서 "스레드별 안전"으로 인식되어야 합니다. 서비스 안정성은 프리포크 모드만큼 좋지 않습니다.

이벤트 모드: 서버 사용량이 매우 많은 경우 위의 두 서버는 작업자에 따라 서비스 프로세스를 연결과 분리합니다. 서버 처리 속도가 매우 빠르고 클릭률이 매우 높을 경우 사용 가능한 스레드 수가 핵심 리소스 제한이 됩니다. 이때 Event MPM 방식이 가장 효과적입니다

1.prefork:

StartServers 5 Clients 150 # 처리되는 최대 요청 수는 성능에 가장 큰 영향을 미칩니다. 기본 최대값은 256입니다. Queue more

MaxRequestsPerChild 0 #프로세스에서 처리하는 최대 요청 수는 0이며 더 크게 설정할 수 있으며 재활용할 필요가 없습니다.

2.worker:

StartServers 2 #시작 프로세스 수

MaxClients 150 #최대 프로세스 요청 수

MinSpareThreads 25 #최소 유휴 수 thread

MaxSpareThreads 75 #최대 유휴 스레드 수

ThreadsPerChild 25 #각 프로세스에서 생성할 수 있는 스레드 수, 최대 20,000개까지 가능하며 성능은 밀접한 관련이 있습니다

MaxRequestsPerChild 0 #스레드에서 처리할 수 있는 최대 요청 수, 0 무제한

작업자 모드에서 동시에 처리할 수 있는 총 요청 수는 총 요청 수에 따라 결정됩니다. 하위 프로세스 수에 Threadsperchild 값을 곱한 값은 maxclients보다 크거나 같아야 합니다. 로드가 매우 크고 기존 하위 프로세스 수를 충족할 수 없는 경우 제어 프로세스는 새 하위 프로세스를 생성합니다.

팁: 기본 최대 하위 프로세스 수는 16개입니다. 이를 늘려야 하는 경우 serverlimit 값을 명확하게 선언해야 합니다(최대 값은 20000).

확인하세요. Apache 작업자의 동시 연결 수:

[root@LAMP ~]# pstree -a|grep httpd|wc -l

84

[root@LAMP ~] #

3. 해당 이벤트는 조사되지 않습니다

2. 테스트 분석

핵심사항 :

1, apachectl -M libphp5.so 여부를 확인하세요 로드됩니다

2 . AddType Application/x-httpd-php .php

가 httpd.conf에 올바르게 작성되었습니다. 3. PHP 코드 형식이 올바르게 작성되어야 합니다

4. selinux를 꺼야 합니다

5. 2.4 거부 허용으로 변경되지 않았습니다

6. 호스트가 추가되지 않았습니다

2.

httpd.conf 경고 신호 앞의 줄을 삭제하세요

#Include conf/extra/httpd-vhosts.conf

vim /usr/local/apache2/con5. 가상 호스트용

http ://www.lishiming.net/thread-554-1-1.htmlf/extra/httpd-vhosts.conf

2.

쉽게 말하면, 일부 불법 사이트는 자체 홈페이지 프로그램에서 허가 없이 다른 사이트의 리소스를 불법적으로 호출한 후, 이러한 호출된 리소스를 자체 웹사이트에 표시하여 자체 사이트에 표시되는 콘텐츠를 채우는 효과가 있습니다. 이는 리소스 웹사이트를 호출하는 네트워크 트래픽을 낭비하여 다른 웹사이트의 대역폭과 서비스 압박을 가중시키거나 심지어 다운타임을 초래합니다.

웹사이트 핫링크 해결 방법:

1. http 리퍼러 기반 핫링크 방지 구현

HTTP 프로토콜에는 리퍼러라는 URL 형식을 사용하는 헤더 필드가 있습니다. 현재 웹 페이지에 링크된 리소스가 어디에서 왔는지 나타냅니다. 리퍼러는 대상이 방문한 소스 웹 페이지를 감지할 수 있으며, 리소스 파일인 경우 이를 표시하는 웹 페이지 주소를 추적할 수 있습니다. 소스가 이 사이트가 아니면 차단되거나 반환될 페이지를 지정하세요. 현재 Apache, nginx, lighttpd는 모두 http 리퍼러 기반의 안티 핫링크를 지원합니다

2. 쿠키 기반 처리

3. lighttpd는 액세스 경로의 암호화된 변환을 통한 안티 핫링크를 제공합니다. 유사한 플러그인 mod_secdownload

Apache 웹 서비스는 실제로 핫링크 방지를 구현합니다

ServerAdmin ucode@gmail.com

DocumentRoot "/var/html/bbs"

ServerName ucode.blog.51cto.com

ServerAlias ​​​​www.dummy-host.example.com

ErrorLog "로그 /bbs-error_log"

CustomLog "|/usr/local/sbin/cronolog /app/logs/access_bbs_%Y%m%d.log" 결합

RewriteEngine On #Open anti- 리칭

RewriteCond %{ HTTP_REFERER}!^http://ucode.blog.51cto.com/.*$ [NC]

RewriteCond %{HTTP_REFERER}!^http://ucode .blog.51cto.com/$ [NC ]

RewriteCond %{HTTP_REFERER}!^http://ucode.blog.51cto.com/.*$ [NC]

RewriteCond % {HTTP_REFERER}!^http://ucode .blog.51cto.com$ [NC]

RewriteCond .*.(gif|jpg|swf)$ http://ucode.blog.51cto.com/ img/nolink.jpg [ R,NC]

위의 굵은 부분이 충족되면 http://ucode.blog.51cto로 반환됩니다. com/img/nolink.jpgPicture

Listen 80##기본 수신 포트는 80

PidFile /export/servers/apache2/logs/httpd.pid

LoadModule authn_file_module module/mod_authn_file.so##로드된 모듈

사용자 admin ##일반 기본 설정은 admin

그룹 관리자 ##일반 기본 설정은 admin

DocumentRoot "/ import/servers/apache2/htdocs"##프로젝트 파일 경로 설정

ServerAdmin you@example.com ##서버에서 오류가 보고되면 클라이언트로 돌아가서 관리자에게 문의하세요

ServerName localhost:80 ##서버 이름: 포트

AddType application/x-httpd-php .php를 사용하면 .php 텍스트 파일 형식을 사용하여 PHP 프로그램도 실행할 수 있습니다.

1 <디렉터리 />

옵션 FollowSymLinks

AllowOverride None

주문 거부, 허용

모두 허용

#Options: 특정 디렉터리에서 어떤 기능을 사용할지 구성합니다. 공통 값과 기본 의미는 다음과 같습니다.

#ExecCGI: 실행 허용 이 디렉토리 스크립트의 CGI.

#FollowSymLinks: 파일 시스템이 이 디렉토리의 심볼릭 링크를 사용하도록 허용합니다.

#Indexes: 사용자가 디렉토리에 접근할 때, DirectoryIndex에서 지정한 홈페이지 파일(예: #index.html)을 찾을 수 없는 경우 디렉토리에 있는 파일 목록을 사용자에게 반환합니다.

#SymLinksIfOwnerMatch: 기호 링크를 사용할 때 파일 소유자가 실제 파일 소유자와 동일한 경우에만 기호 링크에 액세스할 수 있습니다.

포함을 통해 서버측 포함이 허용됩니다.

IncludeNOEXEC는 서버 측 포함을 허용하지만 #exec 명령 및 #exec CGI를 비활성화합니다. ScriptAliase 디렉토리에서 가상 CGI 스크립트를 #include하는 것은 여전히 ​​가능합니다.

예를 들어 + 및 - 기호가 없는 경우:

Options Indexes FollowSymLinks

Options Contains

그런 다음 포함만 /web/으로 설정됩니다. docs /spec 디렉토리입니다.

그러나 두 번째 옵션 지시문이 + 및 - 기호를 사용하는 경우:

Options Indexes FollowSymLinks

< ; /디렉터리>

<디렉토리 /web/docs/spec>

옵션 +Includes -색인

그러면 FollowSymLinks 및 Contains가 /web/docs/spec 디렉토리로 설정되어야 합니다.

#AllowOverride: .htaccess 파일에 존재할 수 있는 지시어 유형(.htaccess 파일 이름은 변경될 수 있으며 해당 파일 이름은 AccessFileName 지시어에 의해 결정됨):

#None : AllowOverride가 None으로 설정된 경우. 이 디렉터리에서 .htaccess 파일을 검색하지 마세요(서버 오버헤드를 줄일 수 있음).

#All: 모든 지시문을 .htaccess 파일에서 사용할 수 있습니다.

순서: 액세스 중에 허용 및 거부 두 가지 액세스 규칙 중 어느 것이 우선적으로 적용되는지 제어합니다.

허용: 액세스가 허용된 호스트 목록(사용 가능한 도메인 이름 또는 서브넷, 예: 다음에서 허용) 192.168.0.0/16).

거부: 액세스가 거부된 호스트 목록입니다.

아파치 서버는 디렉터리에 대한 문서 접근 제어를 수행할 수 있습니다. 그러나 접근 제어는 두 가지 방법으로 가능합니다. 하나는 httpd.conf(또는 access.conf) 설정 파일에서 각 디렉터리에 대해 설정하는 것입니다

Timeout 300 ##클라이언트 프로그램과 서버 연결 사이의 타임아웃 간격

KeepAlive On ###한 연결에서 여러 HTTP 요청 전송

MaxKeepAliveRequests 100 ###에 대해 수행할 수 있습니다. 하나의 연결 최대 HTTP 요청 수

KeepAliveTimeout 15 ### 서버가 하나의 요청을 완료했지만 클라이언트 프로그램에서 다음 요청을 받지 못한 경우 연결에서 여러 요청 전송 사이의 시간을 테스트합니다. 간격이 이 매개변수로 설정된 값을 초과하면 서버 연결이 끊어집니다.

ErrorLog 로그/error_log #로그 저장 위치

Log레벨 경고 ##로그 레벨 디버그 로그 섹터, 로그가 더 있습니다

로그의 기본 형식은 다음과 같습니다. 다음과 같이 입력하세요:

LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" 결합

LogFormat "%h %l %u %t "%r" %>s %b" common #common은 로그 형식 이름입니다

LogFormat "%{Referer}i -> % U" 리퍼러

LogFormat "%{User-agent}i" 에이전트

CustomLog 로그/access_log 공통

형식의 매개변수는 다음과 같습니다.

%h – 클라이언트의 IP 주소 또는 호스트 이름

%l - 이것은 클라이언트의 identd에 의해 결정되는 RFC 1413 ID입니다. 출력에서 ​​"-" 기호는 여기에 있는 정보가 유효하지 않음을 나타냅니다.

%u – HTTP 인증 시스템을 통해 얻은 웹페이지에 액세스한 클라이언트의 이름입니다. 인증을 통해서만 유효합니다. 출력의 "-" 기호는 여기에 있는 정보가 유효하지 않음을 나타냅니다.

%t – 서버가 요청 처리를 완료한 시간입니다.

"%r" – 따옴표는 고객이 보낸 요청 내용으로 유용한 정보가 많이 포함되어 있습니다.

%>s - 서버가 클라이언트에 반환하는 상태 코드입니다.

%b – 마지막 항목은 응답 헤더를 제외하고 클라이언트에 반환된 바이트 수입니다.

"%{Referer}i" – 이 항목은 요청이 제출된 웹 페이지를 지정합니다.

"%{User-Agent}i" – 고객의 브라우저에서 제공하는 브라우저 식별정보입니다


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:리눅스 침입다음 기사:리눅스 침입