서버가있을 때 세상에서 가장 일반적인 것은 보안과 더 많은 보안에 대해 생각하는 것입니다. 결코 편집증이 될 수 없습니다 😉
다소 일반적인 관행이지만 권장되지 않는 것은 모든 데이터베이스에 대해 동일한 사용자를 사용하는 것입니다. 루트를 사용하는 경우에는 더 나빠 보입니다.모호함 또는 무지로 인해) 이렇게, 나는 이미 당신이 이렇게 행동해서는 안되는 이유에 대해 이야기했습니다. 어린이의 소식이제 다른 사용자에서 웹 서버 처리를 분리하는 것이 더 나은 방법과 이유를 설명 할 시간입니다. 이번에는 Nginx에.
사용자와 웹 서버는 무엇입니까?
간단하고 간단하게 설명하기 위해 웹 서버 (apache, nginx 등)는 시스템의 프로세스를 열고 HDD (이미지 등)에서 파일을 가져 와서 만드는 프로세스를 열어야합니다. 클라이언트의 브라우저에서 사용할 수 있습니다. 웹 서버는 단순히 파일을 가져 와서 아무도 아닌 것으로 조작 할 수 없습니다. 즉, 결국이 모든 작업을 수행 할 사용자가 필요하며 그 사용자가 제가 말하는 사용자입니다. 이해하십니까?
여러 사용자를 분리하는 것은 무엇입니까?
서버에 2 개의 웹 사이트가 있다고 가정 해 보겠습니다. 개인 프로젝트 인 웹 사이트와 다른 웹 사이트 (그것이 우리의 여자 친구 또는 형제의 것이라고 상상해 봅시다.). 별도의 데이터베이스와 다른 사용자를 사용하여 액세스하더라도 결국 두 웹 사이트의 파일이 동일한 사용자에 의해 조작되고 PHP 처리는 모든 사이트에 대해 동일한 사용자가 관리합니다 (일반적으로 www-data입니다.). 이것은 권장되지 않는 관행입니다. 모든 것을 잘 분리하는 것이 좋습니다. 오래된 속담처럼 후회하는 것보다 안전한 것이 낫습니다.
네, Nginx로 어떻게하는지 이해합니다.
가장 먼저 주목할 점은 Nginx에는 Apache처럼 PHP 처리를 처리하는 자체 모듈이 없다는 것입니다. Nginx의 경우 Apache보다 잘 작동하거나 더 잘 작동하는 PHP-CGI 또는 PHP-FPM을 사용해야합니다. 따라서 다른 사용자간에 PHP 처리를 분리하려면 Nginx 자체가 아닌 PHP 구성 파일 (CGI 또는 FPM)의 행을 변경해야합니다.
당신이 사용한다고 가정 PHP-FPM, 구성 파일을 생성합니다. 풀 특정 사이트, 즉 풀은 PHP 처리와 PHP-FPM을 분리하는 방법이지만 부분적으로 진행됩니다.
1. 먼저 우리가 사용할 시스템의 사용자를 알아야합니다. 아직 생성 된 것이 없다고 가정하고 생성하겠습니다.
adduser blog
사용자 생성, 비밀번호 입력 등의 일반적인 프로세스를 시작합니다.
1. 먼저 /etc/php5/fpm/pool.d/로 이동합니다.
cd /etc/php5/fpm/pool.d/
2. 이제 blog.conf라는 파일을 생성합니다.
touch blog.conf
3. 이제 VHost 블로그에 사용할 풀의 구성을 입력합니다.
[블로그] 사용자 = 블로그 그룹 = 블로그 듣기 = / var / run / php5-fpm-블로그.sock listen.owner = 블로그 청취.그룹 = 블로그 오후 = 온 디맨드 pm.max_children = 96 chdir = /
참고 : 내가 빨간색으로 표시 한 것은 이전에 만든 사용자에 따라 수정해야하는 것입니다. 예를 들어, 다른 사용자 (예를 들어 포럼) 블로그 대신 단순히 각 줄에 포럼을 넣으십시오. 이해됩니까?
4. 새 풀 (방금 만들고 편집 한 blog.conf 파일), Nginx VHost에이 사이트에 대해 해당 VHost에 대해 다른 양말을 사용하도록 지시 할 차례입니다. 사용될 양말은 우리가 이전에 선언 한 것입니다 (/var/run/php5-fpm-blog.sock). Nginx VHost를 편집하고 PHP 처리 부분에서 해당 양말을 사용하도록 지정합니다. 예를 들면 :
위치 ~ \ .php $ {if (! -f $ request_filename) {return 404; }
fastcgi_pass 유닉스 : / var / run / php5-fpm-블로그.양말;
fastcgi_params 포함; fastcgi_param SCRIPT_FILENAME $ document_root $ fastcgi_script_name; fastcgi_read_timeout 300; }
보시다시피 해당 VHost (그 라인은 예를 들어 / etc / nginx / sites-enabled / vhost-blog 안에 있습니다.) /var/run/php5-fpm-blog.sock에있는 양말을 사용하여 수행하십시오 ... 이전에 /etc/php5/fpm/pool.d/blog.conf를 편집 할 때 만든 양말입니다. 이해되지 않습니까?
5. 이 작업이 완료되면 두 서비스 (php5-fpm 및 nginx)와 voila를 다시 시작하면 해당 사이트 (vhost)의 처리가 www-data 또는 root 또는 이와 유사한 사람이 수행하지 않고 우리가 이전에 정의 된.
여기서는 추신 보조 | 그렙 fpm 내 노드의 서버 중 하나에서 :
ps aux | grep fpm ebook 586 0.0 0.0 349360 1204? S Mar30 0:00 php-fpm : 풀 ebook ebook 589 0.0 0.0 349360 1204? S Mar30 0:00 php-fpm : 풀 ebook www 608 0.0 0.2 350084 5008? S Mar30 0:00 php-fpm : 풀 www www 609 0.0 0.2 350600 5048? S Mar30 0:00 php-fpm : 풀 www tv3 611 0.0 0.0 349360 1204? S Mar30 0:00 php-fpm : 풀 tv3 tv3 615 0.0 0.0 349360 1204? S Mar30 0:00 php-fpm : pool tv3 magazine 1818 1.7 1.7 437576 36396? S 09:55 0:46 php-fpm : 풀 매거진 매거진 2264 1.9 1.7 437332 35884? S 10:15 0:26 php-fpm : 풀 매거진 학생 2338 4.3 1.0 428992 22196? S 10:18 0:53 php-fpm : 풀 학생 잡지 2413 1.8 1.7 437764 36152? S 10:22 0:18 php-fpm : 풀 구틀 매거진 2754 3.5 1.3 356724 27164? S 10:38 0:00 php-fpm : 풀 gutl cgr 5624 0.0 1.0 365168 22696? S Apr28 0:16 php-fpm : pool cgr pupil 7900 0.3 2.5 457052 52444? S Apr25 20:23 php-fpm : 수영장 학생 학생 11021 0.4 2.5 458316 52864? S Apr28 5:57 php-fpm : pool pupil cgr 11254 0.0 1.0 363152 21708? S Apr28 0:12 php-fpm : 풀 cgr cgr 13184 0.0 1.0 362872 21360? S Apr28 0:08 php-fpm : 풀 cgr
보시다시피 ... Nginx + PHP-FPM을 사용하여 사용자가 PHP 처리를 분리하는 것은 정말 쉽습니다. 여러 사용자가 있기 때문에 여러 풀이 있음을 알 수 있습니다.
결론
서버에 관해서는 결코 편집증이 없습니다 ... 보안은 함께 할 일이 아닙니다. 우리가 항상 서버와 서비스의 보안을 개선하려고 노력할수록 (성공적) 해킹 시도 또는 이와 유사한 것 😉
Gaara, 현재 이러한 것들은 가능한 한 자동화되어야합니다. Ansible을 사용해 보는 것이 좋습니다. 에이전트가 없으면 원격 호스트에 python, 구성이 매우 간단하고 yaml 파일, Jinja 템플릿 만 있으면됩니다.
https://github.com/ansible/ansible-examples/tree/master/wordpress-nginx
보자, 그것은 항상 WordPress 사이트에만 해당되는 것은 아니며 ... haha 아마도 Ansible이 volao를 클릭 할 수도 있지만 새 양말을 만드는 데 1 분을 소비해야하더라도 서버에서 모든 것이 어떻게 작동하는지 정확히 알고 싶습니다. 새로운 VHost 😀
Ansible을 사용하면 모든 것을 자동화하고 원하는대로 실제로 수행 할 수 있습니다.이 방법의 장점은 관행을 캡슐화 한 다음 마음대로 실행한다는 것입니다.로드가 많은 사이트가 있고 애플리케이션 서버간에로드 밸런싱을 수행하려는 경우 정확히 똑같이 구성해야합니다. 한 단계를 건너 뛰거나 그 중 하나에서 다른 작업을 수행 할 수 없습니다. 절차를 단계적으로 4 번 수행하는 것을 상상할 수 있습니까? Ansible을 사용하면 인벤토리 파일과 Voilá에 호스트 이름을 추가하는 것만 큼 간단합니다!
http://www.ansible.com/how-ansible-works
Ansible 컬트에 대해 죄송합니다.하지만 여러분이 발견 한 기술 중 하나이며, 매우 멋지고 실용적이기 때문에 모든 사람이 지금 사용하기를 바랍니다. 마치 NGINX를 발견하고 모든 친구들이 즉시 Apache를 떠나기를 원할 때와 같습니다.
https://speakerdeck.com/slok/ansible-all-the-things
내 게시물이 이것을 보완한다고 확신합니다 ...
http://blog.ngen.com.ar/configuracion-segura-de-un-webserver-con-nginx-php-fpm/
저는 개발자이고 NGIX를 사용하면 nginx + php-fpm을 구성 할 때 많은 문제가있었습니다. 나는 archlinux 배포판이 서버로 만드는 데 최고가 아니라는 것을 알고 있지만 ngix 또는 php 버전을 업데이트 할 때마다 모든 것이 항상 충돌하여 시도를 포기했습니다. 오늘은 고전적인 Apache +를 사용합니다. PHP이지만 NGIX를 다시 살펴보면 ... 가상 머신에서
사고 방식이 약간 변경되고 nginx는 정적 콘텐츠를 제공하고 실제 PHP를 실행하는 php-fpm에 대한 역방향 프록시 역할을합니다. 부분적으로 시작하여 단계적으로 배포를 달성하고 배포 가이드를 찾아야합니다. 작업하는 프레임 워크, 각 프레임 워크에는 공개, 정적, 리소스 등의 이름으로 세부 정보가 있습니다.
존재하지 않는 "호스트 어"라는 단어를 버리는 큰 호의를 커뮤니티에하십시오. 하나님이 "호스트"라고 말하는 것이 그렇게 어렵습니까?
인사말, 귀하의 예에 따라 wordpress backen, 즉 wp-admin이 백엔드로 들어오는 연결을 위해 새 소켓을 만드는 경우에만 풀을 만들 수 있는지 알고 싶습니다.
위치 / wp-admin {
루트 /var/www/yoursite.com/wp-admin;
index index.php index.html index.htm;
위치 ~ ^ / wp-admin /(.+. php) $ {
try_files $ uri = 404;
루트 /var/www/yoursite.com/wp-admin;
/ etc / nginx / fastcgi_params를 포함하십시오.
fastcgi_pass server unix:/run/php5-fpm2.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_buffer_size 128k;
fastcgi_buffers 256 4k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_read_timeout 1240;
}
location ~* ^/wp-admin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
root /var/www/tusitio.com/wp-admin/;
}
}