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; } } 

Source: https://habr.com/ru/post/J330772/


All Articles