ubuntu 16.04でリバースプロキシ(mod_pagespeedを使用)としてphp + Nginxバージョンを選択したApacheのステップバイステップ構成

インターネット上で、サーバーのセットアップ、Apache、Nginxなどのセットアップに関する一連の記事。 この記事では、簡単な共有ホスティングを段階的に構成します。 すべての操作はコンソールを介して実行されます。



次のタスクは解決され、投稿で説明されます。



1. Apache + PHPをインストールします

2. PHPバージョンを選択する機能

3.他のサイトのディレクトリの読み取りに制限がある、異なるユーザーのサイトを操作する機能。

4. google pagespeedモジュールでNginxをインストールします

5. Nginxをリバースプロキシとして構成する



すべてのステージには説明と説明が含まれます。 投稿自体は、設定の順序を失わないように、それ自体のために書かれていますが、サーバー管理を理解し始める初心者には非常に役立ちます。 SSHのみを備えたUbuntu 16.0.4がサーバーとしてインストールされます。



ステップ1(Apache + PHPのインストール)



ルート権限でシェルを実行します。



sudo -i
      
      





Apacheをインストールします。



 apt install -y apache2
      
      





キー
  -y
      
      



インストールプロセス中に、すべての質問に積極的に自動的に回答するために必要です。 たとえば、次を実行する場合:



  apt install apache2
      
      





その後、インストールプロセス中に、本当にインストールするかどうかを尋ねられます。



phpのインストール(mod_phpなど)



  apt install -y php libapache2-mod-php
      
      





この段階で、phpバージョン7をapacheモジュールとしてインストールします。



ステップ2(PHPバージョンを選択する可能性)



最初の段階で、Apache + PHPサーバーをインストールしました。これにより、PHPはApacheモジュールとして機能します。 PHPにはいくつかの動作モードがあります詳細情報は、 「CGI、FastCGI、PHP-FPM、およびmod_phpの概要」リンクに記載されています。



読むのが面倒な場合は、簡単に説明します。



1. mod_php-Apache自体がphpスクリプトを実行します。



長所:迅速に機能し、最小限の設定と知識が必要です

短所:スクリプトはapacheユーザーから実行されます(通常はwww-data)



2. CGI / FastCGI-Apacheサーバーはphp-cgiインタープリターアプリケーションスクリプトを実行し、次にphp-cgiインタープリターアプリケーションスクリプトがphpスクリプトを実行します



長所:スクリプトは任意のユーザーから実行され、他のアプリケーション(Nginx + PHP)と組み合わせて使用​​でき、PHP構成を個別に作成できます。

短所:速度、追加構成



3.PHP-FPMは、すぐに使用できるプールプロセスを常に保持するアップグレードされたfast-cgiサーバーです。



長所:任意のユーザーから実行されるスクリプト、速度、他のアプリケーションと組み合わせて使用​​できます(Nginx + PHP-FPM-最も一般的な実装)

短所:追加の構成、ポートが必要です。ポートはユーザーごとに開かれます。



CGI / FastCGIに焦点を当てます。 実際、多くの人はそれが最も遅いことを恐れているかもしれませんが、ほとんどの共有ホスティングでは、これが動作モードです(ispmanagerはこの特定の動作モードを使用します)。 必要なPHPバージョンをソースから収集する必要があります。



2.1ソースからのphpの構築



リポジトリの更新:



 apt update
      
      





アセンブリに必要なパッケージをインストールします。



 apt install -y make \ git autoconf \ lynx \ wget \ build-essential \ libxml2-dev \ libssl-dev \ libbz2-dev \ libcurl4-openssl-dev \ libpng12-dev \ libfreetype6-dev \ libxpm-dev \ libmcrypt-dev \ libmhash-dev \ libmysqlclient-dev \ libjpeg62-dev \ freetds-dev \ libjson-c-dev \ re2c \ zlib1g-dev \ libpcre3 \ libpcre3-dev \ unzip \ libxslt1-dev
      
      





\文字は、読みやすくするために改行として使用されます。



php用のフォルダーを作成します。



 mkdir -p /opt/source/php mkdir -p /opt/php/
      
      





PHPソースが保存されるディレクトリに移動します



 cd /opt/source/php
      
      





必要なバージョンのphpをダウンロードして解凍します。



 wget -c http://php.net/get/php-5.6.18.tar.bz2/from/this/mirror -O php-5.6.18.tar.bz2 tar xvjf php-5.6.18.tar.bz2
      
      





最後のコマンドで、リンクphp-5.6.18をダウンロードし、 php-5.6.18.tar.bz2として保存しました

次に、アーカイブを解凍しました。



ダウンロードして解凍したphpのディレクトリに移動します



 cd /opt/source/php/php-5.6.18
      
      





PHPを構成する



 ./configure --enable-cli \ --prefix=/opt/php/php-5.6.18 \ --disable-rpath \ --enable-calendar \ --enable-discard-path \ --enable-fastcgi \ --enable-force-cgi-redirect \ --enable-fpm \ --enable-ftp \ --enable-gd-native-ttf \ --enable-inline-optimization \ --enable-mbregex \ --enable-mbstring \ --enable-pcntl \ --enable-soap \ --enable-sockets \ --enable-sysvsem \ --enable-sysvshm \ --enable-zip \ --with-bz2 \ --with-curl \ --with-curl \ --with-freetype-dir \ --with-gd \ --with-gd \ --with-gettext \ --with-jpeg-dir \ --with-jpeg-dir=/usr/lib/ \ --with-libdir=/lib/x86_64-linux-gnu \ --with-libxml-dir=/usr \ --with-mcrypt \ --with-mhash \ --with-mysql \ --with-mysql \ --with-mysqli \ --with-mysqli \ --with-openssl \ --with-pcre-regex \ --with-pdo-mysql \ --with-png-dir=/usr \ --with-zlib \ --with-zlib-dir
      
      





--prefix = / opt / php / php-5.6.18の行に注意する価値があります 。 プロジェクトがコンパイルされるのはこのディレクトリです。 必要なphpモジュールとコンポーネントを自分で追加または削除することもできます。 ただし、構成には-enable-fastcgiおよび--enable-force-cgi-redirectが必要です。 構成後、phpを収集します



 make make install
      
      





組み立てプロセスは非常に長いため、これについて心配する必要はありません。 アセンブリが完了すると、次のコマンドで確認できます。



 /opt/php/php-5.6.18/bin/php -v
      
      





結果は次のようになります。



PHP 5.6.18(cli)(構築日:2017年6月8日15:59:20)

Copyright©1997-2016 The PHP Group

Zend Engine v2.6.0、著作権©1998-2016 Zend Technologies



2.2 Apacheの構成



次に、fastcgiモードでphpスクリプトを呼び出すためにApacheが必要です。 mod_fcgiのインストールとアクティブ化



 apt install libapache2-mod-fcgid a2enmod cgi fcgid actions
      
      





Apacheサービスを再起動します



 service apache2 restart
      
      





2.3 CGIスクリプトの作成



PHP-FastCGIを実行するラッパーを作成します



 mkdir -p /opt/php/php-5.6.18/fcgi-bin
      
      





このフォルダーで、次の内容のphpというスクリプトを作成します

#!/opt/php/php-5.6.18/bin/php-cgi



個人的には、nanoエディターを使用しています。



 nano /opt/php/php-5.6.18/fcgi-bin/php
      
      





コードを挿入し、CTRL + Xを終了して、変更を確認します。



ファイルを実行可能にします:



 chmod +x /opt/php/php-5.6.18/fcgi-bin/php
      
      





同じディレクトリにphp.ini()ファイルを作成し、 /opt/source/php/php-5.6.18/ php.ini -productionをコピーできます。



2.4 Apacheのホスト構成



この例は、デフォルトの仮想ホスト設定を示します。



 <VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html <IfModule mod_fcgid.c> IPCCommTimeout 7200 FcgidConnectTimeout 320 MaxRequestLen 25728640 FcgidMaxRequestsPerProcess 0 FcgidBusyTimeout 3600 FcgidOutputBufferSize 0 </IfModule> <FilesMatch "\.ph(p[3-5]?|tml)$"> SetHandler fcgid-script FCGIWrapper /opt/php/php-5.6.18/fcgi-bin/php </FilesMatch> ErrorLog /var/www/html/error.log CustomLog /var/www/html/access.log combined </VirtualHost> <Directory /var/www/html> Options +Includes +ExecCGI </Directory>
      
      





Apache設定を再起動します。



 service apache2 reload
      
      





ステップ3(他のサイトのディレクトリの読み取りに制限がある、異なるユーザーのサイトを操作する機能。)



ユーザー権利を区別するために、Apacheには2つの異なるsuEXECおよびITKモジュールがあります。



それぞれの仕組みを考えてみましょう。



ITK-要求が到着すると、Apacheはルートプロセスの権限を継承するハンドラープロセスを作成しますが、コンテキストを確認した後、指定されたユーザーの権限を変更します。



suEXEC-要求が到着すると、Apacheは指定されたユーザーに代わって、ドメインのWebフォルダー内でCGIおよび同様のネイティブまたはサードパーティのスクリプト/プログラムを起動します。



私たちのバージョンのsuEXECは、作業の特定のアーキテクチャのために望ましいです。 suEXECをインストールする



 apt install apache2-suexec-custom a2enmod suexec
      
      







適切な操作を行うには、suexecがディレクトリのパーミッションを正しく設定することが重要です。

ディレクトリをどのように配置するかは、自分で決める必要があります。例は例を示しており、最適ではありません。



フォルダ階層は次のとおりです。



|--/var/www/ - , 751 root

|----/php-bin - php

|------/php-5.6.18 - php-5.6.18

|--------php - php-5.6.18

|--------php.ini -

|--------php.ini -

|----/apache-cert - apache







ユーザーのフォルダーを作成します。



 mkdir -p /var/www/users/admin mkdir -p /var/www/users/admin/domain.ru mkdir -p /var/www/users/admin/apache-log mkdir -p /var/www/users/admin/php-bin mkdir -p /var/www/users/admin/temp mkdir -p /var/www/users/admin/temp/php-session
      
      





phpの構成ファイルをコピーします。



 cp /opt/php/php-5.6.18/fcgi-bin/php /var/www/users/admin/php-bin/php cp /opt/php/php-5.6.18/fcgi-bin/php.ini /var/www/users/admin/php-bin/php.ini
      
      





ユーザーを作成します(adminグループのすべてのユーザーがsudoからプログラムを実行するためのアクセス権を持っていることに注意してください。したがって、adminを選択すると、sudoを実行する権限が自動的に与えられます。この例では、これは重要ではありません。 。



 useradd -m -s /bin/bash admin passwd admin
      
      





フォルダーの所有者を設定します。



 chown admin:admin -R /var/www/users/admin
      
      





ユーザーのルートディレクトリを設定します。



 usermod -d /var/www/users/admin admin
      
      





Apacheで仮想ホストを構成します。



 <VirtualHost *:8080> ServerAdmin webmaster@localhost DocumentRoot /var/www/users/admin/domain.ru SuexecUserGroup admin admin <IfModule mod_remoteip.c> RemoteIPHeader X-Forwarded-For RemoteIPHeader X-Real-IP RemoteIPInternalProxy 127.0.0.1 </IfModule> <ifmodule mod_rewrite.c> RewriteEngine On RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}] </ifmodule> <IfModule mod_fcgid.c> IPCCommTimeout 7200 FcgidConnectTimeout 320 MaxRequestLen 25728640 FcgidMaxRequestsPerProcess 0 FcgidBusyTimeout 3600 FcgidOutputBufferSize 0 </IfModule> <FilesMatch "\.ph(p[3-5]?|tml)$"> SetHandler fcgid-script FCGIWrapper /var/www/users/admin/php-bin/php </FilesMatch> ErrorLog /var/www/users/admin/apache-log/error.log CustomLog /var/www/users/admin/apache-log/access.log combined </VirtualHost> <Directory /var/www/users/admin/www> AllowOverride All Options +Includes +ExecCGI </Directory>
      
      





ユーザーのphp.ini設定で、session.save_pathを変更します

session.save_path = /var/www/users/admin/temp/php-session







Apacheを再起動します。



 service apache2 restart
      
      





ステップ4(google pagespeedモジュールでNginxをインストールする)



Nginxでpagespeedをサポートするには、このモジュールでNginx自体を再構築する必要がありますが、後で追加の設定を登らないようにするには、最初にインストールする方が簡単です。

Apacheのポートを変更します。



 /etc/apache2/ports.conf +    
      
      





Apacheを再起動します。



 service apache2 restart
      
      





ngnixをインストールします。



 apt-get install nginx
      
      





PagespeedでNginxを構築する



最初に、ビルドする必要があるすべてのパッケージをインストールする必要があります。



 apt install -y build-essential zlib1g-dev libpcre3 libpcre3-dev unzip libxslt1-dev libgd-dev libgeoip-dev
      
      





nginxソース用のフォルダーを作成します。



 mkdir -p /opt/source/nginx cd /opt/source/nginx
      
      





pagespeedとpsolをダウンロードして解凍します。 Yt cnjbn g



 wget https://github.com/pagespeed/ngx_pagespeed/archive/v1.11.33.4-beta.zip unzip v1.11.33.4-beta.zip cd ngx_pagespeed-1.11.33.4-beta wget https://dl.google.com/dl/page-speed/psol/1.11.33.4.tar.gz tar -xzvf 1.11.33.4.tar.gz
      
      





Psol自体がダウンロードされ、ngx_pagespeedでディレクトリに解凍されます。 Ngnixでフォルダーに移動します



 cd /opt/source/nginx
      
      





ngnixのバージョンの確認(デフォルトでは、ubuntu 16.0.4は1.10.0をインストールします):



 nginx -V
      
      





NバージョンのNGINXをダウンロードします。



 wget https://nginx.ru/download/nginx-1.10.0.tar.gz tar -xvzf nginx-1.10.0.tar.gz
      
      





インストールされたものと同じパラメーターでnginxを収集しますが、最後に追加のモジュールを追加します:



 cd /opt/source/nginx/nginx-1.10.0 ./configure \ --with-cc-opt='-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_v2_module --with-http_sub_module --with-http_xslt_module --with-stream --with-stream_ssl_module --with-mail --with-mail_ssl_module --with-threads \ --add-module=/opt/source/nginx/ngx_pagespeed-1.11.33.4-beta \ --with-http_mp4_module
      
      





Nginxのビルド:



 make make install
      
      





アセンブルされたNginxバイナリは、/ opt / source / nginx / nginx-1.10.0 / objs / nginxディレクトリにあります。 インストールするためには、現在の実行可能なNginxファイルをアセンブルされたファイルで置き換えるだけです。



Nginxを停止し、ファイルを置き換えて、再起動します。



 service nginx stop
      
      





#(念のため)現在のnginxの名前をnginx_backupに変更します。



 mv /usr/sbin/nginx /usr/sbin/nginx_backup
      
      





#その代わりに、新しくアセンブルされたバイナリを移動します。



 mv /opt/source/nginx/nginx-1.10.0/objs/nginx /usr/sbin/nginx
      
      





nginxを再起動します:



 service nginx start
      
      





pagespeedのキャッシュストレージフォルダーを作成します。



 /var/www/temp/ /var/www/temp/page-speed/
      
      





httpセクションに/etc/nginx/nginx.confを追加します。



 pagespeed on; pagespeed FileCachePath "/var/www/temp/page-speed/"; pagespeed EnableFilters combine_css,combine_javascript,rewrite_images,rewrite_css,rewrite_javascript,inline_images,recompress_jpeg,recompress_png,resize_images; pagespeed JpegRecompressionQuality 85; pagespeed ImageRecompressionQuality 85; pagespeed ImageInlineMaxBytes 2048; pagespeed LowercaseHtmlNames on;
      
      





ステップ5(Nginxをリバースプロキシとして構成)



Nginxをリバースプロキシとして設定するための多くの記事がインターネット上にあります。 トライアル設定オプションを提供します。



 server { listen 80; server_name domain.ru; access_log /var/log/nginx.access_log; location ~* \.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|xml|docx|xlsx)$ { root /var/www/users/admin/domain.ru; index index.html index.php; access_log off; expires 30d; error_page 404 = @prox; } location @prox{ proxy_pass 127.0.0.1:8880; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-for $remote_addr; proxy_set_header Host $host; proxy_connect_timeout 60; proxy_send_timeout 90; proxy_read_timeout 90; proxy_redirect off; proxy_set_header Connection close; proxy_pass_header Content-Type; proxy_pass_header Content-Disposition; proxy_pass_header Content-Length; } location ~ /\.ht { deny all; } location / { proxy_pass 127.0.0.1:8880; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-for $remote_addr; proxy_set_header Host $host; proxy_connect_timeout 60; proxy_send_timeout 90; proxy_read_timeout 90; proxy_redirect off; proxy_set_header Connection close; proxy_pass_header Content-Type; proxy_pass_header Content-Disposition; proxy_pass_header Content-Length; } }
      
      





ソース:
https://pro-gram.ru/nginx-apache-ubuntu.html

http://www.info-x.org/freebsd/programmy/apache_suexec_php_v_rezhime_cgi.html

http://adminunix.ru/nastrojka-php-5-2-cherez-fastcgi-i-php-5-3-kak-modul-apache2-na/

https://www.server-world.info/en/note?os=Ubuntu_16.04&p=httpd&f=14

http://webew.ru/posts/5351.webew

https://camouf.ru/blog-note/589/

https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=32&CHAPTER_ID=04902&LESSON_PATH=3903.4897.4900.4902



All Articles