-
Notifications
You must be signed in to change notification settings - Fork 73
/
apache2.xml
387 lines (341 loc) · 15.7 KB
/
apache2.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: e51792efe0f103ec8724ad199524d7543610c978 Maintainer: shein Status: ready -->
<!-- Reviewed: no -->
<sect1 xml:id="install.unix.apache2" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Apache 2.x на Unix системах</title>
<para>
Раздел описывает установку PHP c веб-сервером Apache 2.x на Unix-системах.
</para>
&warn.apache2.compat;
<para>
Наиболее авторитетный источник информации по Apache 2.x —
<link xlink:href="&url.apache2.docs;">документация к Apache</link>.
Документация даёт подробную информацию о настройках при установке.
</para>
<para>
Последняя версия веб-сервера Apache HTTP Server доступна для загрузки
<link xlink:href= "&url.apache;">на странице загрузки Apache</link>,
а совместимая версия PHP — на странице Download на этом сайте.
Это краткое руководство описывает только базовую установку Apache 2.x и PHP.
Дополнительную информацию даёт
<link xlink:href="&url.apache2.docs;">документация к Apache</link>.
В инструкции ниже опустили номера версий — замените 'NN' на
номер, который соответствует версии Apache.
</para>
<para>
Сайт веб-сервера предлагает для загрузки две версии Apache 2.x — 2.4 и 2.2.
Лучше предпочесть последнюю версию — 2.4, если нет причин для установки
версии 2.2.
Инструкции этого раздела будут работать как для версии 2.4, так и для версии 2.2.
Обратите внимание, что поддержку Apache httpd 2.2 официально прекратили,
поэтому разработку этой версии остановили и больше не выпускают исправлений.
</para>
<orderedlist>
<listitem>
<para>
Скачайте Apache HTTP Server по приведённой ссылке
и распакуйте его:
</para>
<informalexample>
<screen>
<![CDATA[
tar -xzf httpd-2.x.NN.tar.gz
]]>
</screen>
</informalexample>
</listitem>
<listitem>
<para>
Аналогичным способом скачайте и распакуйте исходные коды PHP:
</para>
<informalexample>
<screen>
<![CDATA[
tar -xzf php-NN.tar.gz
]]>
</screen>
</informalexample>
</listitem>
<listitem>
<para>
Скомпилируйте и установите Apache. Подробнее об установке
рассказывает документация к Apache.
</para>
<informalexample>
<screen>
<![CDATA[
cd httpd-2_x_NN
./configure --enable-so
make
make install
]]>
</screen>
</informalexample>
</listitem>
<listitem>
<para>
Теперь Apache 2.x.NN доступен по адресу /usr/local/apache2,
установщик настроил веб-сервер на поддержку загружаемых модулей и работу через
стандартный мультипроцессный MPM-модуль, который отвечает на запросы по модели prefork:
обрабатывает запросы в отдельном потоке однопоточных процессов.
Правильно ли прошла установка, проверяют через стандартную
процедуру запуска Apache — командой наподобие вот такой:
<informalexample>
<screen>
<![CDATA[
/usr/local/apache2/bin/apachectl start
]]>
</screen>
</informalexample>
Затем остановите сервер, чтобы сконфигурировать и установить PHP:
<informalexample>
<screen>
<![CDATA[
/usr/local/apache2/bin/apachectl stop
]]>
</screen>
</informalexample>
</para>
</listitem>
<listitem>
<para>
Теперь сконфигурируем и соберём PHP. На этом этапе PHP настраивают
через опции конфигурации, чтобы указать, например, какие модули требуется включить.
Запустите команду <command>./configure --help</command>, чтобы получить список доступных параметров
конфигурации. В примере мы выполним простую настройку
с поддержкой веб-сервера Apache и БД MySQL.
</para>
<para>
При сборке Apache из исходного кода по приведённой на этой странице инструкции
путь к команде <command>apxs</command> будет соответствовать пути в следующем примере,
но если Apache установили другим способом, потребуется изменить пример и указать путь к <command>apxs</command>,
который соответствует установке. Обратите внимание, что отдельные дистрибутивы
переименовывают <command>apxs</command> в <command>apxs2</command>.
</para>
<informalexample>
<screen>
<![CDATA[
cd ../php-NN
./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-pdo-mysql
make
make install
]]>
</screen>
</informalexample>
<para>
Если потребуется изменить параметры конфигурации после установки,
то потребуется повторно выполнить шаги <command>configure</command>, <command>make</command>
и <command>make install</command>.
Просто перезапустите Apache, чтобы изменения вступили в силу и новый модуль начал работать.
Перекомпиляция Apache для этого не требуется.
</para>
<para>
Обратите внимание: если не указали иное, команда <command>make install</command>
установит также пакетный менеджер <link xlink:href="&url.php.pear;">PEAR</link>,
инструменты PHP наподобие <link linkend="install.pecl.phpize">phpize</link>,
установит CLI-интерфейс для работы с PHP в командной оболочке и другие компоненты.
</para>
</listitem>
<listitem>
<para>
Настройте файл <filename>php.ini</filename>.
</para>
<informalexample>
<screen>
<![CDATA[
cp php.ini-development /usr/local/lib/php.ini
]]>
</screen>
</informalexample>
<para>
Установка параметров PHP доступна через редактирование файла <literal>.ini</literal>.
Укажите параметр <literal>--with-config-file-path=/some/path</literal> в шаге 5,
если предпочитаете хранить файл <filename>php.ini</filename> в другом месте.
</para>
<para>
Если вместо этого вы выберете файл <filename>php.ini-production</filename>,
прочитайте список изменений внутри, поскольку они влияют на поведение PHP.
</para>
</listitem>
<listitem>
<para>
Отредактируйте файл <filename>httpd.conf</filename>,
чтобы Apache загружал модуль PHP.
Путь к PHP-модулю указывают справа от инструкции <literal>LoadModule</literal>.
Команда <command>make install</command>, возможно, уже добавила эту инструкцию автоматически,
ну лучше проверить.
</para>
<informalexample>
<para>Для PHP 8:</para>
<programlisting role="apache-conf">
<![CDATA[
LoadModule php_module modules/libphp.so
]]>
</programlisting>
</informalexample>
<informalexample>
<para>
Для PHP 7:
</para>
<programlisting role="apache-conf">
<![CDATA[
LoadModule php7_module modules/libphp7.so
]]>
</programlisting>
</informalexample>
</listitem>
<listitem>
<para>
Скажите веб-серверу Apache, чтобы он разбирал файлы с конкретными расширениями как PHP-код.
Например, пусть Apache разбирает как PHP-код файлы с расширением <literal>.php</literal>.
Вместо установки только Apache-директивы
<literal>AddType</literal> избегают исполнения опасных загрузок и файлов
наподобие <filename>exploit.php.jpg</filename>.
Аналогично следующему примеру указывают одно или больше произвольных расширений,
которые веб-сервер будет разбирать как файлы с PHP-кодом.
Для демонстрации добавим расширение <literal>.php</literal>.
</para>
<informalexample>
<programlisting role="apache-conf">
<![CDATA[
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
]]>
</programlisting>
</informalexample>
<para>
Или, когда требуется разрешить запуск PHP-кода из файлов
с расширениями <literal>.php</literal>, <literal>.php2</literal>,
<literal>.php3</literal>, <literal>.php4</literal>, <literal>.php5</literal>,
<literal>.php6</literal> и <literal>.phtml</literal>, но не другими,
настройка выглядит вот так:
</para>
<informalexample>
<programlisting role="apache-conf">
<![CDATA[
<FilesMatch "\.ph(p[2-6]?|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
]]>
</programlisting>
</informalexample>
<para>
А чтобы фильтр исходного PHP-кода обрабатывал файлы с расширением <literal>.phps</literal>
и показывал как исходный код с подсветкой синтаксиса,
настройку записывают вот так:
</para>
<informalexample>
<programlisting role="apache-conf">
<![CDATA[
<FilesMatch "\.phps$">
SetHandler application/x-httpd-php-source
</FilesMatch>
]]>
</programlisting>
</informalexample>
<para>
Модуль <literal>mod_rewrite</literal> умеет показывать произвольные файлы
с расширением <literal>.php</literal> как исходный код с подсветкой синтаксиса
без переименования или копирования в файл с расширением <literal>.phps</literal>:
</para>
<informalexample>
<programlisting role="apache-conf">
<![CDATA[
RewriteEngine On
RewriteRule (.*\.php)s$ $1 [H=application/x-httpd-php-source]
]]>
</programlisting>
</informalexample>
<para>
Фильтр исходного PHP-кода отключают
в производственной среде, поскольку он раскрывает конфиденциальную
или другую чувствительную информацию, которую встроили в исходный код.
</para>
</listitem>
<listitem>
<para>
Сервер Apache запускают стандартной процедурой наподобие:
</para>
<informalexample>
<screen>
<![CDATA[
/usr/local/apache2/bin/apachectl start
]]>
</screen>
</informalexample>
<para>ИЛИ</para>
<informalexample>
<screen>
<![CDATA[
service httpd restart
]]>
</screen>
</informalexample>
</listitem>
</orderedlist>
<para>
Выполнение действий, которые описала эта страница, запускает веб-сервер Apache2
с поддержкой PHP в виде <literal>SAPI</literal>-модуля.
Конечно, для PHP и Apache доступно гораздо больше параметров конфигурации.
Дополнительную информацию даёт команда <command>./configure --help</command>
при запуске в соответствующем дереве исходного кода.
</para>
<para>
Сборка веб-сервера Apache будет работать в многопоточном режиме,
если при сборке Apache вместо стандартного мультипроцессного MPM-модуля <filename>prefork</filename>
выбрать мультипроцессный MPM-модуль, который отвечает на запросы
по модели <filename>worker</filename>: обрабатывает отдельный запрос в отдельном потоке
многопоточного процесса. Чтобы сделать это, к аргументу, который передали команде <command>./configure</command>
на шаге 3, добавляют следующую опцию:
</para>
<informalexample>
<screen>
<![CDATA[
--with-mpm=worker
]]>
</screen>
</informalexample>
<para>
Веб-сервер собирают для работы по такой модели, только если осознают
последствия решения и отчётливо понимают смысл действий. Документация Apache
<link xlink:href="&url.apache2.mpm;">к MPM-модулям</link>
рассматривает работу модулей MPM подробнее.
</para>
<note>
<para>
В разделе FAQ в ответе на вопрос
<link linkend="faq.installation.apache.multiviews">о параметре MultiViews в настройках Apache</link>
обсуждается согласование контента множественного представления при работе веб-сервера с PHP-файлами.
</para>
</note>
<note>
<para>
Только в системах с поддержкой потоков получится собрать многопоточную версию Apache.
Тогда требуется и PHP-сборка с поддержкой потокобезопасного ZTS-режима (англ. Zend Thread Safety).
В этой конфигурации не каждое расширение будет доступно.
Разработчики PHP рекомендуют настраивать сборку Apache
на работу с MPM-модулем <filename>prefork</filename> по умолчанию.
</para>
</note>
</sect1>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->