Nginx에서 서로 다른 사용자로 여러 VHost 호스팅

서버가있을 때 세상에서 가장 일반적인 것은 보안과 더 많은 보안에 대해 생각하는 것입니다. 결코 편집증이 될 수 없습니다 😉

다소 일반적인 관행이지만 권장되지 않는 것은 모든 데이터베이스에 대해 동일한 사용자를 사용하는 것입니다. 루트를 사용하는 경우에는 더 나빠 보입니다.모호함 또는 무지로 인해) 이렇게, 나는 이미 당신이 이렇게 행동해서는 안되는 이유에 대해 이야기했습니다. 어린이의 소식이제 다른 사용자에서 웹 서버 처리를 분리하는 것이 더 나은 방법과 이유를 설명 할 시간입니다. 이번에는 Nginx에.

전용 서버_하위 이미지

사용자와 웹 서버는 무엇입니까?

간단하고 간단하게 설명하기 위해 웹 서버 (apache, nginx 등)는 시스템의 프로세스를 열고 HDD (이미지 등)에서 파일을 가져 와서 만드는 프로세스를 열어야합니다. 클라이언트의 브라우저에서 사용할 수 있습니다. 웹 서버는 단순히 파일을 가져 와서 아무도 아닌 것으로 조작 할 수 없습니다. 즉, 결국이 모든 작업을 수행 할 사용자가 필요하며 그 사용자가 제가 말하는 사용자입니다. 이해하십니까?

여러 사용자를 분리하는 것은 무엇입니까?

서버에 2 개의 웹 사이트가 있다고 가정 해 보겠습니다. 개인 프로젝트 인 웹 사이트와 다른 웹 사이트 (그것이 우리의 여자 친구 또는 형제의 것이라고 상상해 봅시다.). 별도의 데이터베이스와 다른 사용자를 사용하여 액세스하더라도 결국 두 웹 사이트의 파일이 동일한 사용자에 의해 조작되고 PHP 처리는 모든 사이트에 대해 동일한 사용자가 관리합니다 (일반적으로 www-data입니다.). 이것은 권장되지 않는 관행입니다. 모든 것을 잘 분리하는 것이 좋습니다. 오래된 속담처럼 후회하는 것보다 안전한 것이 낫습니다.

네, Nginx로 어떻게하는지 이해합니다.

2000px-Nginx_logo.svg

가장 먼저 주목할 점은 Nginx에는 Apache처럼 PHP 처리를 처리하는 자체 모듈이 없다는 것입니다. Nginx의 경우 Apache보다 잘 작동하거나 더 잘 작동하는 PHP-CGI 또는 PHP-FPM을 사용해야합니다. 따라서 다른 사용자간에 PHP 처리를 분리하려면 Nginx 자체가 아닌 PHP 구성 파일 (CGI 또는 FPM)의 행을 변경해야합니다.

당신이 사용한다고 가정 PHP-FPM, 구성 파일을 생성합니다. 특정 사이트, 즉 풀은 PHP 처리와 PHP-FPM을 분리하는 방법이지만 부분적으로 진행됩니다.

1. 먼저 우리가 사용할 시스템의 사용자를 알아야합니다. 아직 생성 된 것이 없다고 가정하고 생성하겠습니다.

다음 명령은 모두 직접 루트 또는 sudo를 사용하여 관리 권한으로 실행해야합니다.

adduser blog

사용자 생성, 비밀번호 입력 등의 일반적인 프로세스를 시작합니다.

나는 사용자에게 블로그를 작성하여 우리가 호스팅 할 첫 번째 사이트가 블로그가 될 것이라는 예를 따르고 있습니다. 어떤 사이트와 관련된 각 사용자를 알기 위해

1. 먼저 /etc/php5/fpm/pool.d/로 이동합니다.

cd /etc/php5/fpm/pool.d/

2. 이제 blog.conf라는 파일을 생성합니다.

touch blog.conf

3. 이제 VHost 블로그에 사용할 풀의 구성을 입력합니다.

nano ...로 blog.conf 파일을 편집합니다. 예 : sudo nanoblog.conf
[블로그] 사용자 = 블로그
그룹 = 블로그
듣기 = / 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 처리를 분리하는 것은 정말 쉽습니다. 여러 사용자가 있기 때문에 여러 풀이 있음을 알 수 있습니다.

결론

서버에 관해서는 결코 편집증이 없습니다 ... 보안은 함께 할 일이 아닙니다. 우리가 항상 서버와 서비스의 보안을 개선하려고 노력할수록 (성공적) 해킹 시도 또는 이와 유사한 것 😉


코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자 : Miguel Ángel Gatón
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.

  1.   사냥꾼

    Gaara, 현재 이러한 것들은 가능한 한 자동화되어야합니다. Ansible을 사용해 보는 것이 좋습니다. 에이전트가 없으면 원격 호스트에 python, 구성이 매우 간단하고 yaml 파일, Jinja 템플릿 만 있으면됩니다.

    https://github.com/ansible/ansible-examples/tree/master/wordpress-nginx

    1.    KZKG ^ 가아라

      보자, 그것은 항상 WordPress 사이트에만 해당되는 것은 아니며 ... haha ​​아마도 Ansible이 volao를 클릭 할 수도 있지만 새 양말을 만드는 데 1 분을 소비해야하더라도 서버에서 모든 것이 어떻게 작동하는지 정확히 알고 싶습니다. 새로운 VHost 😀

      1.    사냥꾼

        Ansible을 사용하면 모든 것을 자동화하고 원하는대로 실제로 수행 할 수 있습니다.이 방법의 장점은 관행을 캡슐화 한 다음 마음대로 실행한다는 것입니다.로드가 많은 사이트가 있고 애플리케이션 서버간에로드 밸런싱을 수행하려는 경우 정확히 똑같이 구성해야합니다. 한 단계를 건너 뛰거나 그 중 하나에서 다른 작업을 수행 할 수 없습니다. 절차를 단계적으로 4 번 수행하는 것을 상상할 수 있습니까? Ansible을 사용하면 인벤토리 파일과 Voilá에 호스트 이름을 추가하는 것만 큼 간단합니다!

        http://www.ansible.com/how-ansible-works

      2.    사냥꾼

        Ansible 컬트에 대해 죄송합니다.하지만 여러분이 발견 한 기술 중 하나이며, 매우 멋지고 실용적이기 때문에 모든 사람이 지금 사용하기를 바랍니다. 마치 NGINX를 발견하고 모든 친구들이 즉시 Apache를 떠나기를 원할 때와 같습니다.

        https://speakerdeck.com/slok/ansible-all-the-things

  2.   음스타아라빈

    내 게시물이 이것을 보완한다고 확신합니다 ...
    http://blog.ngen.com.ar/configuracion-segura-de-un-webserver-con-nginx-php-fpm/

  3.   썩은 87

    저는 개발자이고 NGIX를 사용하면 nginx + php-fpm을 구성 할 때 많은 문제가있었습니다. 나는 archlinux 배포판이 서버로 만드는 데 최고가 아니라는 것을 알고 있지만 ngix 또는 php 버전을 업데이트 할 때마다 모든 것이 항상 충돌하여 시도를 포기했습니다. 오늘은 고전적인 Apache +를 사용합니다. PHP이지만 NGIX를 다시 살펴보면 ... 가상 머신에서

    1.    사냥꾼

      사고 방식이 약간 변경되고 nginx는 정적 콘텐츠를 제공하고 실제 PHP를 실행하는 php-fpm에 대한 역방향 프록시 역할을합니다. 부분적으로 시작하여 단계적으로 배포를 달성하고 배포 가이드를 찾아야합니다. 작업하는 프레임 워크, 각 프레임 워크에는 공개, 정적, 리소스 등의 이름으로 세부 정보가 있습니다.

  4.   익명

    존재하지 않는 "호스트 어"라는 단어를 버리는 큰 호의를 커뮤니티에하십시오. 하나님이 "호스트"라고 말하는 것이 그렇게 어렵습니까?

  5.  

    인사말, 귀하의 예에 따라 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/;
    }
    }