Пример файла HOSTS /etc/hosts
192.168.100.1 odin.example.com
192.168.100.80 fenris.asgard.com fenris
192.168.100.10 loki.asgard.com loki
--------------------------------------------------------------------
Apache Конфиг
C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf
Nginx Конфиг
С:\nginx-1.2.6\conf\nginx.conf
--------------------------------------------------------------------
Apache Запись правил
<Directory /home>
...
</Directory>
Nginx Запись правил
http {
...
}
--------------------------------------------------------------------
Apache Пользователь сервера и его группа
User apache
Group 506
Nginx Пользователь сервера и его группа
user dima rabota; # имя пользователя и его группа
--------------------------------------------------------------------
Apache Ограничение зоны действия директив для файлов внутри папки и ее внутренних подпапок
<Directory /home/site2>
...
</Directorr>
<Directory "/home/site[1-3]">
...
</Directory>
Nginx Ограничение зоны действия для файлов внутри папки и ее внутренних подпапок
--------------------------------------------------------------------
Apache Ограничение зоны действия директив по URL
<Location /stuff>
order deny, allow
deny from all
allow from 127.0.0.1
</Location>
<LocationMatch "/status[1-3]">
order deny, allow
deny from all
allow from 127.0.0.1
</Location>
Nginx Ограничение зоны действия директив по URL
location /admin/ {
index.php;
access_log off;
access_log log/main.log;
log_format main '$pid - $nginx_version - $remote_addr';
log_not_found on;
}
--------------------------------------------------------------------
Apache Ограничение зоны действия применительно к отдельному файлу или к нескольким файлам
<Files .htaccess>
Order deny, allow
Deny from all
</Files>
<FilesMatch "/pic[1-3].jpg">
Order deny, allow
Deny from all
</FilesMatch>
Nginx Ограничение зоны действия применительно к отдельному файлу или к нескольким файлам
--------------------------------------------------------------------
Apache Используемые директивы внутри скобок <Directory >, <Location >, <Files >
AllowOverride All - разрешить перезаписать сходные директивы в файле .htaccess
AllowOverride None - запретить перезаписать сходные директивы в файле .htaccess
order allow, deny - задать порядок следования ниже лежащих директив (разрешить, затем запретить)
order deny, allow - задать порядок следования ниже лежащих директив (запретить, затем разрешить)
allow - задать IP-адрес или доменное имя, которому будет разрешен запрос к серверу.
deny - задать IP-адрес или доменное имя, которому будет запрещен запрос к серверу.
allow from all - разрешить всем IP-адресам или доменным именам отправлять запрос к серверу.
deny from all - запретить всем IP-адресам или доменным именам отправлять запрос к серверу.
Nginx Используемые директивы внутри скобок location
--------------------------------------------------------------------
Apache Папка, в которой по умолчанию будут располагаться все HTML-файлы
DocumentRoot /opt/apache/htdocs
Nginx Папка, в которой по умолчанию будут располагаться все HTML-файлы
location / {
root html;
}
--------------------------------------------------------------------
Apache Дефолтные имена файлов, которые будут являться главными HTML-файлами
DirectoryIndex index.html index.htm index.cgi index.shtml
Nginx Дефолтные имена файлов, которые будут являться главными HTML-файлами
location / {
index index.html index.htm;
}
--------------------------------------------------------------------
Apache MimeType по умолчанию, если MimeType сервер не смог определить
DefaultType text/plain
Nginx MimeType по умолчанию, если MimeType сервер не смог определить
default_type application/octet-stream;
--------------------------------------------------------------------
Apache Alias - Cвязывание соотвествия URL-адреса месту расположения файлов в папке на жестком диске сервера
Alias /адрес/ /папка/на/жестком/диске/с/картинками/например/
Nginx Alias - Cвязывание соотвествия URL-адреса месту расположения файлов в папке на жестком диске сервера
location /admin/ {
alias /var/www/locked/;
}
--------------------------------------------------------------------
Apache Добавить ассоциацию с Mimetype
AddType application/x-httpd-php .php
Nginx Добавить ассоциацию с Mimetype
types {
mimetype1 extension1;
mimetype2 extension2 [extension3…];
[…]
}
location /downloads/ {
types {
mimetype1 extension1;
}
}
--------------------------------------------------------------------
Apache Определение браузера по user-agent
BrowseMatch Mozilla/2 nokeepalive
Nginx Определение браузера по user-agent
$http_user_agent
--------------------------------------------------------------------
Apache Корневой каталог сервера
ServerRoot /opt/apache
Nginx Корневой каталог сервера
root /home/website.com/public_html;
--------------------------------------------------------------------
Apache Задание папки для записи файла логов об ошибках
ErrorLog logs/error_log
Nginx Задание папки для записи файла логов об ошибках
error_log logs/error.log;
--------------------------------------------------------------------
Apache Ограничение времени существования неактивных соединений
Timeout 150 (секунд)
Nginx Ограничение времени существования неактивных соединений
client_body_timeout 3m;
client_body_timeout 180s;
--------------------------------------------------------------------
Apache Разрешить поддержание устойчивых соединений
KeepAlive On
KeepAliveTimeout 15
Nginx Разрешить поддержание устойчивых соединений
http {
keepalive_timeout 65;
}
--------------------------------------------------------------------
Apache Задание прослушивания IP-адреса и порта
Listen 80
Listen 192.168.1.2:80
Nginx Задание прослушивания IP-адреса и порта
server {
listen 80;
}
--------------------------------------------------------------------
Apache Виртуальный хостинг
<VirtualHost 192.168.1.1>
ServerName www.example.org
DocumentRoot /some/other/directory
</VirtualHost>
<VirtualHost www.idiots.org>
DocumentRoot /some/other/directory
</VirtualHost>
Что можно добавить внутрь скобок <VirtualHost >
ServerName www.site2.com - доменное имя сайта
DocumentRoot /home/site2 - адрес папки с файлами для сайта
ServerAdmin admin@site2.com - почтовый адрес администратора сайта
ErrorLog /home/logs - адрсе папки для записи логов сервера для сайта
transferLog /home/trans - адрес папки для записи логов передачи данных от сервера для сайта
Директивы, которые нельзя прописывать внутри скобок виртуального хостинга
BindAddress
Listen
MaxSpareServers
MinSpareServers
MaxRequestPerChild
PidFile
ServerRoot
ServerType
TypeConfig
NameVirtualHost
Отстальное можно.
Nginx Виртуальный хостинг
http {
server {
listen 80;
server_name www.example1.com;
location / {
root /var/www/testapp;
index index.php index.html index.htm;
}
}
}
--------------------------------------------------------------------
Apache Proxy Прокси
Listen 8888
<VirtualHost 192.168.100.1:8888>
ServerName proxy.asgard.com
ProxyRequests On
</VirtualHost>
<Directory proxy:*>
order deny, allow
deny from список IP-адресов
allow from список IP-адресов
</Directory>
ProxyPass /distant/mirror http://www.tuchman.edu
Nginx Proxy Прокси
server {
listen 80;
server_name example1.com;
access_log /var/www/example1.com/log/nginx.access.log;
error_log /var/www/example1.com/log/nginx_error.log debug;
location / {
include proxy.conf;
proxy_pass http://127.0.0.1:8080;
}
}
--------------------------------------------------------------------
Apache Отказ в подступе при попытке загрузки файлов
<Directory />
Order deny, allow
Deny from all
</Directory>
<Directory /opt/apache/htdocs>
Order deny, allow
Allow from all
</Directory>
<Directory /some/directory>
order deny, allow
deny from all
allow from 192.168.100.0/255.255.252.0
</Directory>
Nginx Отказ в подступе при попытке загрузки файлов
location /admin/ {
allow 192.168.1.0/24;
deny all;
}
--------------------------------------------------------------------
Apache Задание бэйсик авторизации
<Directory /some/directory>
AuthName "Example of Access Control"
AuthType Basic
AuthUserFile /etc/security/.htpasswd
Require valid-user
</Directory>
Nginx Задание бэйсик авторизации
location /admin/ {
allow 192.168.1.0/24;
deny all;
auth_basic "Authentication required";
auth_basic_user_file conf/htpasswd;
}
--------------------------------------------------------------------
Apache Включение SSL-шифрования
NameVirtualHost 64.22.73.226
<VirtualHost 64.82.73.226>
ServerName www.securesite.com
DocumentRoot /home/site3
SSLEngine on
SSLCertificate /var/ssl/server.crt
SSLCACertificateFile /path/to/certificate
SSLLog /var/log/ssllog
SSLLogLevel warn
</VirtualHost>
Можно еще добавить
SSLCertificetKeyFile /var/ssl/server.key
SSLCACertificatePath /some/secure/directory
SSLVerifyClient 1
SSLVerifyDepth 3
Nginx Включение SSL-шифрования
server {
listen 443;
server_name secure.website.com;
ssl on;
ssl_certificate /path/to/combined.crt;
ssl_certificate_key /path/to/secure.website.com.key;
...
}
Пример
http {
...
ssl_certificate common.crt;
ssl_certificate_key common.key;
server {
listen 80;
server_name www.example1.com;
location / {
...
}
}
server {
listen 443 default ssl;
server_name payment.example1.com;
location / {
...
}
}
server {
listen 80;
listen 443;
server_name static.example1.com;
location / {
root /var/www/www.example1.com/static;
}
}
--------------------------------------------------------------------
Apache Включение инклюдов Server Side Includes в HTML на стороне сервера
<Location /ssdir>
Options +Include
</Location>
Nginx Включение инклюдов Server Side Includes в HTML на стороне сервера
server {
server_name website.com;
location ~* \.shtml$ {
ssi on; (разрешить инклюды для этого адреса)
}
}
<html>
<head>
<!--# include file="header.html" -->
</head>
<body>
<!--# include file="body.html" -->
<!--# include virtual="/footer.php?id=123" -->
</body>
</html>
Команды SSI
<!--# include file="header.html" -->
<!--# include virtual="/sources/header.php?id=123" -->
<!--# include virtual="header.php" wait="yes" -->
<!--# set var="MY_VARIABLE" value="hello" -->
<!--# echo var="MY_VARIABLE" -->
<!--# set var="MY_VARIABLE" value="$MY_VARIABLE there" -->
<!--# echo var="MY_VARIABLE" -->
<!--# if expr="expression1" -->
...
<!--# elif expr="expression2" -->
...
<!--# else -->
...
<!--# endif -->
<!--# config errmsg="Something terrible happened" -->
<!--# config timefmt="%A, %d-%b-%Y %H:%M:%S %Z" -->
--------------------------------------------------------------------
Apache Переадресация через mod_rewrite
Rewriteengine On - включение режима перезаписи URL
RewriteRule ^/$ /apache backup [R] - задание переадресации
RewriteCond
Nginx Переадресация через mod_rewrite
rewrite ^/(.*)\.(png|jpg|gif)$ /image.php? file=$1&format=$2 last;
rewrite "hel{2,}o" /hello.php;
rewrite 'hel{2,}o' /hello.php;
server {
server_name website.com;
root /var/www/vhosts/website.com/httpdocs/;
location /documents/ { (
rewrite ^/documents/(.*)$ /storage/$1;
}
}
Частые правила переписывания URL страниц
Поиск для сайта
Input URI http://website.com/search/some-search-keywords
Rewritten URI http://website.com/search.php?q=some-search-keywords
Rewrite rule rewrite ^/search/(.*)$ /search.php?q=$1?;
Просмотр профиля пользователя
Input URI http://website.com/user/31/James
Rewritten URI http://website.com/user.php?id=31&name=James
Rewrite rule rewrite ^/user/([0-9]+)/(.+)$ /user.php?id=$1&name=$2?;
Передача нескольких параметров в URL
Input URI http://website.com/index.php/param1/param2/param3
Rewritten URI http://website.com/index.php?p1=param1&p2=param2&p3=param3
Rewrite rule rewrite ^/index.php/(.*)/(.*)/(.*)$ /index.php?p1=$1&p2=$2&p3=$3?;
Как на Wikipedia
Input URI http://website.com/wiki/Some_keyword
Rewritten URI http://website.com/wiki/index.php?title=Some_keyword
Rewrite rule rewrite ^/wiki/(.*)$ /wiki/index.php?title=$1?;
Показать статью на новостном сайте
Input URI http://website.com/33526/us-economy-strengthens
Rewritten URI http://website.com/article.php?id=33526
Rewrite rule rewrite ^/([0-9]+)/.*$ /article.php?id=$1?;
Форум
Input URI http://website.com/topic-1234-50-some-keywords.html
Rewritten URI http://website.com/viewtopic.php?topic=1234&start=50
Rewrite rule rewrite ^/topic-([0-9]+)-([0-9]+)-(.*)\.html$ /viewtopic.php?topic=$1&start=$2?;
--------------------------------------------------------------------
Apache задание имени сервера
NameVirtualHost 192.168.1.1:80
ServerName www.example.com
Nginx задание имени сервера
http {
server {
listen 80; (порт 80)
server_name example.com; (доменное имя)
}
}
--------------------------------------------------------------------
пятница, 22 февраля 2013 г.
четверг, 14 февраля 2013 г.
PostgreSQL Cheat Sheet
CREATE DATABASE
CREATE DATABASE dbName;
CREATE TABLE (with auto numbering integer id)
CREATE TABLE tableName ( id serial PRIMARY KEY, name varchar(50) UNIQUE NOT NULL, dateCreated timestamp DEFAULT current_timestamp );
Add a primary key
ALTER TABLE tableName ADD PRIMARY KEY (id);
Create an INDEX
CREATE UNIQUE INDEX indexName ON tableName (columnNames);
Backup a database (command line)
pg_dump dbName > dbName.sql
Backup all databases (command line)
pg_dumpall > pgbackup.sql
Run a SQL script (command line)
psql -f script.sql databaseName
Search using a regular expression
SELECT column FROM table WHERE column ~ 'foo.*';
The first N records
SELECT columns FROM table LIMIT 10;
Pagination
SELECT cols FROM table LIMIT 10 OFFSET 30;
Prepared Statements
PREPARE preparedInsert (int, varchar) AS INSERT INTO tableName (intColumn, charColumn) VALUES ($1, $2); EXECUTE preparedInsert (1,'a'); EXECUTE preparedInsert (2,'b'); DEALLOCATE preparedInsert;
Create a Function
CREATE OR REPLACE FUNCTION month (timestamp) RETURNS integer
AS 'SELECT date_part(''month'', $1)::integer;'
LANGUAGE 'sql';
Table Maintenance
VACUUM ANALYZE table;
Reindex a database, table or index
REINDEX DATABASE dbName;
Show query plan
EXPLAIN SELECT * FROM table;
Import from a file
COPY destTable FROM '/tmp/somefile';
Show all runtime parameters
SHOW ALL;
Grant all permissions to a user
GRANT ALL PRIVILEGES ON table TO username;
Perform a transaction
BEGIN TRANSACTION UPDATE accounts SET balance += 50 WHERE id = 1; COMMIT;Basic SQL
Get all columns and rows from a table
SELECT * FROM table;
Add a new row
INSERT INTO table (column1,column2) VALUES (1, 'one');
Update a row
UPDATE table SET foo = 'bar' WHERE id = 1;
Delete a row
DELETE FROM table WHERE id = 1;
MySQL CheatSheet
Query
SELECT * FROM table SELECT * FROM table1, table2, ... SELECT field1, field2, ... FROM table1, table2, ... SELECT ... FROM ... WHERE condition SELECT ... FROM ... WHERE condition GROUP BY field SELECT ... FROM ... WHERE condition GROUP BY field HAVING condition2 SELECT ... FROM ... WHERE condition ORDER BY field1, field2 SELECT ... FROM ... WHERE condition ORDER BY field1, field2 DESC SELECT ... FROM ... WHERE condition LIMIT 10 SELECT DISTINCT field1 FROM ... SELECT DISTINCT field1, field2 FROM ...
SELECT ... FROM t1 JOIN t2 ON t1.id1 = t2.id2 WHERE condition SELECT ... FROM t1 LEFT JOIN t2 ON t1.id1 = t2.id2 WHERE condition SELECT ... FROM t1 JOIN (t2 JOIN t3 ON ...) ON ... SELECT ... FROM t1 JOIN t2 USING(id) WHERE condition
Conditionals
field1 = value1 field1 <> value1 field1 LIKE 'value _ %' field1 IS NULL field1 IS NOT NULL field1 IN (value1, value2) field1 NOT IN (value1, value2) condition1 AND condition2 condition1 OR condition2
Data Manipulation
INSERT INTO table1 (field1, field2, ...) VALUES (value1, value2, ...) INSERT table1 SET field1=value_1, field2=value_2 ...
DELETE FROM table1 / TRUNCATE table1 DELETE FROM table1 WHERE condition -- join: DELETE FROM table1, table2 WHERE table1.id1 = table2.id2 AND condition
UPDATE table1 SET field1=new_value1 WHERE condition -- join: UPDATE table1, table2 SET field1=new_value1, field2=new_value2, ... WHERE table1.id1 = table2.id2 AND condition
Browsing
SHOW DATABASES SHOW TABLES SHOW FIELDS FROM table / SHOW COLUMNS FROM table / DESCRIBE table / DESC table / EXPLAIN table SHOW CREATE TABLE table SHOW CREATE TRIGGER trigger SHOW TRIGGERS LIKE '%update%' SHOW PROCESSLIST KILL process_number SELECT table_name, table_rows FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '**yourdbname**'; $ mysqlshow $ mysqlshow database
Create / delete / select / alter database
CREATE DATABASE [IF NOT EXIST] mabase [CHARACTER SET charset] [COLLATE collation] CREATE DATABASE mabase CHARACTER SET utf8 DROP DATABASE mabase USE mabase
ALTER DATABASE mabase CHARACTER SET utf8
Create/delete/modify table
CREATE TABLE table (field1 type1, field2 type2, ...)
CREATE TABLE table (field1 type1, field2 type2, ..., INDEX (field))
CREATE TABLE table (field1 type1, field2 type2, ..., PRIMARY KEY (field1))
CREATE TABLE table (field1 type1, field2 type2, ..., PRIMARY KEY (field1, field2))
CREATE TABLE table1 (fk_field1 type1, field2 type2, ...,
FOREIGN KEY (fk_field1) REFERENCES table2 (t2_fieldA)
[ON UPDATE] [CASCADE|SET NULL|RESTRICT]
[ON DELETE] [CASCADE|SET NULL|RESTRICT])
CREATE TABLE table1 (fk_field1 type1, fk_field2 type2, ...,
FOREIGN KEY (fk_field1, fk_field2) REFERENCES table2 (t2_fieldA, t2_fieldB))
CREATE TABLE table IF NOT EXISTS (...)
CREATE TABLE new_tbl_name LIKE tbl_name [SELECT ... FROM tbl_name ...]
CREATE TEMPORARY TABLE table (...)
DROP TABLE table DROP TABLE IF EXISTS table DROP TABLE table1, table2, ... DROP TEMPORARY TABLE table
ALTER TABLE table MODIFY field1 type1 ALTER TABLE table MODIFY field1 type1 NOT NULL ... ALTER TABLE table CHANGE old_name_field1 new_name_field1 type1 ALTER TABLE table CHANGE old_name_field1 new_name_field1 type1 NOT NULL ... ALTER TABLE table ALTER field1 SET DEFAULT ... ALTER TABLE table ALTER field1 DROP DEFAULT ALTER TABLE table ADD new_name_field1 type1 ALTER TABLE table ADD new_name_field1 type1 FIRST ALTER TABLE table ADD new_name_field1 type1 AFTER another_field ALTER TABLE table DROP field1 ALTER TABLE table ADD INDEX (field); ALTER TABLE table ADD PRIMARY KEY (field);
-- Change field order: ALTER TABLE table MODIFY field1 type1 FIRST ALTER TABLE table MODIFY field1 type1 AFTER another_field ALTER TABLE table CHANGE old_name_field1 new_name_field1 type1 FIRST ALTER TABLE table CHANGE old_name_field1 new_name_field1 type1 AFTER another_field
ALTER TABLE old_name RENAME new_name;
Keys
CREATE TABLE table (..., PRIMARY KEY (field1, field2)) CREATE TABLE table (..., FOREIGN KEY (field1, field2) REFERENCES table2 (t2_field1, t2_field2)) ALTER TABLE table ADD PRIMARY KEY (field);
Privileges
GRANT ALL PRIVILEGES ON base.* TO 'user'@'localhost' IDENTIFIED BY 'password'; GRANT SELECT, INSERT, DELETE ON base.* TO 'user'@'localhost' IDENTIFIED BY 'password'; REVOKE ALL PRIVILEGES ON base.* FROM 'user'@'host'; -- one permission only REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user'@'host'; -- all permissions
SET PASSWORD = PASSWORD('new_pass')
SET PASSWORD FOR 'user'@'host' = PASSWORD('new_pass')
SET PASSWORD = OLD_PASSWORD('new_pass')
DROP USER 'user'@'host'
Main data types
TINYINT (1o: -127+128) SMALLINT (2o: +-65 000) MEDIUMINT (3o: +-16 000 000) INT (4o: +- 2 000 000 000) BIGINT (8o: +-9.10^18) Precise interval: -(2^(8*N-1)) -> (2^8*N)-1 /!\ INT(2) = "2 digits displayed" -- NOT "number with 2 digits max"
INT NOT NULL auto_increment PRIMARY KEY -- auto-counter for PK
FLOAT(M,D) DOUBLE(M,D) FLOAT(D=0->53) /!\ 8,3 -> 12345,678 -- NOT 12345678,123!
TIME (HH:MM) YEAR (AAAA) DATE (AAAA-MM-JJ) DATETIME (AAAA-MM-JJ HH:MM; années 1000->9999) TIMESTAMP (like DATETIME, but 1970->2038, compatible with Unix)
VARCHAR (single-line; explicit size) TEXT (multi-lines; max size=65535) BLOB (binary; max size=65535) Variants for TEXT&BLOB: TINY (max=255) MEDIUM (max=~16000) LONG (max=4Go) Ex: VARCHAR(32), TINYTEXT, LONGBLOB, MEDIUMTEXT
ENUM ('value1', 'value2', ...) -- (default NULL, or '' if NOT NULL)
Forgot root password?
$ /etc/init.d/mysql stop
$ mysqld_safe --skip-grant-tables
$ mysql # on another terminal
mysql> UPDATE mysql.user SET password=PASSWORD('nouveau') WHERE user='root';
## Kill mysqld_safe from the terminal, using Control + \
$ /etc/init.d/mysql start
Repair tables after unclean shutdown
mysqlcheck --all-databases mysqlcheck --all-databases --fast
load data from local file
If you are running mysql and using your newly created database use the below code to run the script file mysql> SOURCE input_filefrom terminal mysql -u root -p database < filename-20120201.tbz
Краткое руководство по директивам Nginx
Управление nginx
nginx -s stop (выйти немедленно)
nginx -s quit (выйти обычным образом)
nginx -s reopen (переоткрыть log файлы)
nginx -s reload (перезагрузить конфигурацию)
killall nginx (убить все сервера nginx)
nginx -t (протестировать конфигурацию)
Настройка nginx
Файл nginx/conf/nginx.conf
nginx.conf: (основной файл конфигурации сервера)
# это комментарий
user dima rabota; (имя системного пользователя и имя его грыппы под правами которого запущен сервер)
worker_processes 4; (число процессов сервера)
worker_priority 0; (приоритет процессов сервера над другими процессами в операционной системе)
log_not_found on; (записывать лог, если страница не найдена)
events {
worker_connections 1024; (число возможных одновременных соединений с сервером)
accept_mutex on;
accept_mutex_delay 500ms;
multi_accept off;
}
include mime.types (список расширений и ассоциаций файлов с ними)
include fastcgi.conf (настройки FastCGI)
include proxy.conf (настройки для proxy)
include sites.conf (настройки сайтов, то есть Virtual Hosts. Можно создать для них отдельный файл и подключать их через инклюд)
include other_settings.conf (включение сюда настроек из другого файла. обычный инклюд)
include sites/*.conf (включение всех файлов из папки)
--------------------------------------------------------------------
other_settings.conf:
error_log logs/error.log (определение папки для записи логов сервера)
pid logs/inginx.pid (определение папки для записи pid - идентификатора процесса сервера)
--------------------------------------------------------------------
Директивы, как в Apache, только вместо треугольных скобок <Directory >...</Directory>, скобки http {...}, как в JavaScript.
Таким образом
Apache - это HTML-тэги
Enginx - это JavaScript-объекты (хэш-массивы)
http {
server {
listen 80; (порт 80)
server_name example.com; (доменное имя)
access_log /var/log/nginx/example.com.log; (папка записи логов сервера для этого сайта)
location ^~ /admin/ { (при переходе по URL /admin/ Из папки домашеного пользователя взять файл index.php)
index.php;
access_log off; (лог по этому адресу не записывать)
access_log log/main.log; (записывать логи для URL /admin/ в эту папку)
log_format main '$pid - $nginx_version - $remote_addr'; (записывать логи в таком формате)
log_not_found on; (записывать лог, если страница не найдена)
}
}
}
--------------------------------------------------------------------
Правила для реврайта адресов
rewrite ^/(.*)\.(png|jpg|gif)$ /image.php? file=$1&format=$2 last;
--------------------------------------------------------------------
Определение размера передачи данных
client_max_body_size 2M;
или
client_max_body_size 2048k;
--------------------------------------------------------------------
Установка времени ожидания таймаута
client_body_timeout 3m;
client_body_timeout 180s;
client_body_timeout 180;
--------------------------------------------------------------------
Пример создания тестового сервера
http {
include mime.types;
defautl_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost; (http://localhost/)
location / {
root html; (главное расширение файла)
index index.html index.htm; (главная индексная страница. Могла бы быть и index index.php)
}
error_page 500 502 503 504 /50x.html
location = /50x.html {
root html;
}
}
}
--------------------------------------------------------------------
Базовая конфигурация сервера под сайт.
Структура всегда такая: http / server / location
http - размещаются директивы общие для всех сайтов HTTP
server - прописывается IP, PORT, HOST-доменный адрес сайта
location - настройки для конкретного URL сайта
Пример
http {
gzip on;
server {
listen 80;
server_name localhost;
location /main/ {
...
}
location /downloads/ {
gzip off;
...
}
}
}
Варианты записи директив.
Прослушивать переход по IP-адресу и порту
listen 192.168.1.1:80;
listen 127.0.0.1;
listen 80 default;
listen 443 ssl;
Доменное имя сайта
server_name www.website.com;
server_name www.site1.com site2.com site3.com;
server_name *.website.com;
server_name .website.com;
server_name *.website.*;
server_name ~^\.example\.com$;
Пути до файлов
root /home/website.com/public_html; (корневая директория сайта)
Установка alias соотвествия URL с папкой, где лежат файлы
http {
server {
server_name localhost;
root /var/www/website.com/html; (основная папка, где хранятся файлы сайта)
location /admin/ {
alias /var/www/locked/; (при переходе URL /admin/ взять файлы из папки /var/www/locked/)
}
}
}
Вывод страницы об ошибке
error_page 404 /not_found.html;
error_page 500 501 502 503 504 /server_error.html;
error_page 403 http://website.com/;
error_page 404 @notfound; # перейти на named location block
error_page 404 =200 /index.html; # в случае ошибки 404 сделать редирект на файл index.html с 200 OK response code
Определение главной страницы сайта index
index index.php index.html index.htm;
index index.php index2.php /catchall.php;
Обслуживание запросов бразера.
keepalive_requests 100; (число поддержания одновременных запросов со стороны браузера)
Таймаут запросов
keepalive_timeout 75; (время удержания подключения)
keepalive_timeout 75 60;
Установка MimeTypes
include mime.types;
types {
mimetype1 extension1;
mimetype2 extension2 [extension3…];
[…]
}
Пример 1
http {
include mime.types;
[…]
location /downloads/ {
types { } # удалить все MIME types
default_type application/octet-stream; (установить тип MimeType по умолчанию)
}
[…]
}
Пример 2
http {
include mime.types;
[…]
location /downloads/ {
types {
text/html html;
image/gif gif;
image/jpeg jpg;
}
default_type text/plain; (установить тип MimeType по умолчанию)
}
[…]
}
Ограничить тип подключения, выбрав GET или POST
location /admin/ {
limit_except GET { (ограничить подключение только типом GET)
allow 192.168.1.0/24; (разрешить подключение только с этого IP-адреса)
deny all; (всем остальным запретить)
}
}
limit_except METHOD1 [METHOD2…] {
allow | deny | auth_basic | auth_basic_user_file | proxy_pass | perl;
}
Включить бэйсик авторизэйшон
location /admin/ {
allow 192.168.1.0/24;
deny all;
auth_basic "Authentication required"; (включить базовую авторизацию)
auth_basic_user_file conf/htpasswd; (логин и пароль сверять с файлом из этой папки)
}
Разрешить переход по этому адресу только с локального компьютера
server {
server_name .website.com;
location /admin/ {(на этот адрес можно перейти только с локального компьютера, на котором установлен сервер. Все остальные браузеры получат страницу 404 Not found)
internal;
}
}
Объединять двойные // в один /
merge_slashes off;
Пример
было http://website.com//documents/
стало http://website.com/documents/
Включить правильное отображение страниц с ошибкой 400 и выше в Internet Explorer
msie_padding on;
Уустановка правильного обновления Refresh страницы для Internet Explorer
msie_refresh on;
Разрешить использовать символ _ в серверных заголовках
underscores_in_headers on;
Запустить особый сценарий после выполнения запроса сервером.
location /payment/ {
post_action /scripts/done.php; (запустить это сценарий на сервере после отсылки страницы браузеру)
}
Переменные, хранящие заголовки Request
$http_host - доменное имя из адресной строки (URL сайта)
$http_user_agent - ,hfepth gjkmpjdfntkz
$http_referer - URL-страницы с которой переше пользователь
$http_via - перечень proxy-серверов, которые использовал пользователе\ь
$http_x_forwarded_for - Ip-адрес клиента, если клиент прячется за proxy
$http_cookie - значение куки в браузере пользователя
$http_... - любые другие установленные значения, которые можно получить
Переменные, хранящие заголовки Response
$sent_http_content_type - указан тип MimeType контента
$sent_http_content_length - указана величина body
$sent_http_content_location - указан location ресурса
$sent_http_last_modified - дата модификации контента
$sent_http_connection - поддерживается соединение keep-alive или оно закрыто closed
$sent_http_keep_alive - сколько времени будет поддерживаться соединение keep alive
$sent_http_transfer_encoding - кодировка тела ответа (например оно заархивировано gzip)
$sent_http_cache_control - должен ли браузер кэшировать страницу на своей стороне или нет
$sent_http_... - любые другие установленные значения, которые можно получить
Некоторые другие переменные, генерируемые Nginx
$content_length - длина ответа
$content_type - тип содержимого ответа
$cookie_XXX - выбрать куки с именем XXX
$document_root - адрес корневой папки сайта
$document_uri - текущий URL запроса
$host - доменное имя сайта в URL
$hostname - системное имя компьютера, на котором установлен сервер
$nginx_version - версия сервера
$pid - pid сервера
$query_string - строка запроса в URL после знака ? (тоже самое, что и $args)
$remote_addr - IP-адрес браузера клиента
$remote_port - порт браузера клиента
$remote_user - имя клиента, если он авторизован
$realpath_root - document root в запросе request клиента
$request_body - тело ответа клиенту
$request_method - тип запроса GET или POST
$scheme - схема http или https
$server_addr - IP-адрес компьютера, на котором установлен сервер
$server_name - имя компьютера, на котором установлен сервер
$server_port - порт, на котором установлен сервер
$server_protocol - используемый HTTP-протокол HTTP/1.0 или HTTP/1.1
$uri - тоже самое, что и $document_uri
--------------------------------------------------------------------
Способы задания Location
http {
server {
server_name website.com;
location /abcd {
...
}
location ~ ^/abcd$ {
...
}
location ~* ^/abcd$ {
...
}
location /files/ {
...
}
location = /files/ {
...
}
location /doc {
# requests beginning with "/doc"
}
location ~* ^/document$ {
# requests exactly matching "/document"
}
location /document {
# requests beginning with "/document"
}
location ~* ^/document$ {
# requests exactly matching "/document"
}
location ^~ /doc {
# requests beginning with "/doc"
}
location ~* ^/document$ {
# requests exactly matching "/document"
}
}
}
--------------------------------------------------------------------
Переписывание адресов через регулярные выражения модуля Rewrite
rewrite "hel{2,}o" /hello.php;
rewrite 'hel{2,}o' /hello.php;
--------------------------------------------------------------------
захват значений из URL-адреса размещенных внутри скобок в переменные nginx
PATTERN ^(hello|hi) (sir|mister)$
STRING hello sir
VARIABLES $1 = hello $2 = sir
PATTERN ^(.*)$
STRING nginx rocks
VARIABLES $1 = nginx rocks
PATTERN ^(.{1,3})([0-9]{1,4})([?!]{1,2})$
STRING abc1234!?
VARIABLES $1 = abc $2 = 1234 $3 = !?
Пример
server {
server_name website.com;
location ~* ^/(downloads|files)/(.*)$ {
add_header Capture1 $1;
add_header Capture2 $2;
}
}
--------------------------------------------------------------------
Вывод страниц с сообщениемя об ошибках
server {
server_name website.com;
error_page 403 /errors/forbidden.html; (при ошибке 403 взять страницу из этой папки)
error_page 404 /errors/not_found.html; (при ошибке 404 взять страницу из этой папки)
}
server {
server_name website.com; (доменное имя сайта)
root /var/www/vhosts/website.com/httpdocs/; (корневая папка, где лежат файлы сайта)
error_page 404 /errors/404.html; (при ошибке 404 взять страницу из этой папки)
location /errors/ {
alias /var/www/common/errors/; (при переходе по адресу /errors/ взять файлы из этой папки)
internal; (страница по адресу /errors/ доступна только с локального компьютера, на котором установлен сервер)
}
}
--------------------------------------------------------------------
Переписывание URL-адреса Rewrite при переходе на страницу
server {
server_name website.com;
root /var/www/vhosts/website.com/httpdocs/;
location /storage/ {
internal;
alias /var/www/storage/;
}
location /documents/ { (при переходе на страницу переписывание адреса с documents на storage)
rewrite ^/documents/(.*)$ /storage/$1; (производится редирект на другой адрес)
}
}
Бесконечный цикл перехода
server {
server_name website.com;
location /documents/ {
rewrite ^(.*)$ /documents/$1;
}
}
--------------------------------------------------------------------
Включение Server Side Includes
<html>
<head>
<!--# include file="header.html" -->
</head>
<body>
<!--# include file="body.html" -->
<!--# include virtual="/footer.php?id=123" -->
</body>
</html>
Разрешить SSI
server {
server_name website.com;
location ~* \.shtml$ {
ssi on; (разрешить инклюды для этого адреса)
}
}
Команды SSI
<!--# include file="header.html" -->
<!--# include virtual="/sources/header.php?id=123" -->
<!--# include virtual="header.php" wait="yes" -->
<!--# set var="MY_VARIABLE" value="hello" -->
<!--# echo var="MY_VARIABLE" -->
<!--# set var="MY_VARIABLE" value="$MY_VARIABLE there" -->
<!--# echo var="MY_VARIABLE" -->
<!--# if expr="expression1" -->
...
<!--# elif expr="expression2" -->
...
<!--# else -->
...
<!--# endif -->
<!--# config errmsg="Something terrible happened" -->
<!--# config timefmt="%A, %d-%b-%Y %H:%M:%S %Z" -->
--------------------------------------------------------------------
Условная обработка запросов GET и POST на стороне сервера
server {
if ($request_method = GET) {
...
}
if ($request_method = POST) {
...
}
if ($uri ~ /search/) {
...
}
}
--------------------------------------------------------------------
Частые правила переписывания URL страниц
Поиск для сайта
Input URI http://website.com/search/some-search-keywords
Rewritten URI http://website.com/search.php?q=some-search-keywords
Rewrite rule rewrite ^/search/(.*)$ /search.php?q=$1?;
Просмотр профиля пользователя
Input URI http://website.com/user/31/James
Rewritten URI http://website.com/user.php?id=31&name=James
Rewrite rule rewrite ^/user/([0-9]+)/(.+)$ /user.php?id=$1&name=$2?;
Передача нескольких параметров в URL
Input URI http://website.com/index.php/param1/param2/param3
Rewritten URI http://website.com/index.php?p1=param1&p2=param2&p3=param3
Rewrite rule rewrite ^/index.php/(.*)/(.*)/(.*)$ /index.php?p1=$1&p2=$2&p3=$3?;
Как на Wikipedia
Input URI http://website.com/wiki/Some_keyword
Rewritten URI http://website.com/wiki/index.php?title=Some_keyword
Rewrite rule rewrite ^/wiki/(.*)$ /wiki/index.php?title=$1?;
Показать статью на новостном сайте
Input URI http://website.com/33526/us-economy-strengthens
Rewritten URI http://website.com/article.php?id=33526
Rewrite rule rewrite ^/([0-9]+)/.*$ /article.php?id=$1?;
Форум
Input URI http://website.com/topic-1234-50-some-keywords.html
Rewritten URI http://website.com/viewtopic.php?topic=1234&start=50
Rewrite rule rewrite ^/topic-([0-9]+)-([0-9]+)-(.*)\.html$ /viewtopic.php?topic=$1&start=$2?;
--------------------------------------------------------------------
Задание главной страницы сайта
index index.php index.html index.htm;
index index.php index2.php /catchall.php;
--------------------------------------------------------------------
Включение автоиндексации файлов в папках сайта, если нет индексного файла
http {
server {
location / {
autoindex on;
}
}
}
--------------------------------------------------------------------
Включение базовой авторизации Basic Authtorization
location /admin/ {
auth_basic "Admin control panel";
auth_basic_user_file access/password_file;
}
--------------------------------------------------------------------
Разрешение доступак к странице только с определенного IP-адреса
location {
allow 127.0.0.1; # allow local IP address
deny all; # deny all other IP addresses
}
--------------------------------------------------------------------
Размещение empty gif по адресу, указанному в location
location = /empty.gif {
empty_gif;
}
--------------------------------------------------------------------
Обработка адресов для FLV
location ~* \.flv {
flv;
}
--------------------------------------------------------------------
Добавление HTTP заголовков
add_before_body file_uri;
add_after_body file_uri;
--------------------------------------------------------------------
Memcached
Memcached - это фоновое приложение, которе может быть подсоединено через соекты. Основное его назначение это кэширование данных в пямяти по принципу ключ-значение.
Модуль Nginx Memcached предлагает директивы для доступа к фоновум демону Memcached.
memcached_pass localhost:8888 (задает хост и порт на котором работает программа Memcached)
memcached_connect_timeout 5000;
memcached_send_timeout 5,000;
Пример
server {
server_name example.com;
location / {
set $memcached_key $uri;
memcached_pass 127.0.0.1:8888;
error_page 404 @notcached;
}
location @notcached {
internal;
# Если файл не найден то переадресовать на proxy-сервер
proxy_pass 127.0.0.1:8080;
}
}
Пример Memcached
server {
server_name www.example1.com;
location / {
set $memcached_key $uri;
memcached_pass 127.0.0.1:11211;
default_type text/html;
error_page 404 @fallback;
}
location @fallback {
proxy_pass http://backend;
}
}
--------------------------------------------------------------------
Возможно также:
Обработка картинок средствами сервера nginx
Обработка XSLT средствами сервера nginx
--------------------------------------------------------------------
Установка Real IP
real_ip_header X-Forwarded-For;
set_real_ip_from 192.168.0.0/16;
set_real_ip_from 127.0.0.1;
--------------------------------------------------------------------
Включение SSL-шифрования
server {
listen 443;
server_name secure.website.com;
ssl on;
ssl_certificate /path/to/combined.crt;
ssl_certificate_key /path/to/secure.website.com.key;
...
}
Пример
http {
...
ssl_certificate common.crt;
ssl_certificate_key common.key;
server {
listen 80;
server_name www.example1.com;
location / {
...
}
}
server {
listen 443 default ssl;
server_name payment.example1.com;
location / {
...
}
}
server {
listen 80;
listen 443;
server_name static.example1.com;
location / {
root /var/www/www.example1.com/static;
}
}
--------------------------------------------------------------------
Установка Secure link
location /downloads/ {
secure_link_secret "secret";
if ($secure_link = "") {
return 403;
}
rewrite ^ /downloads/$secure_link break;
}
--------------------------------------------------------------------
Включение FastCGI для подключения языка программирования к серверу PHP, Python. Ruby
fastcgi_pass localhost:9000;
fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/tmp/fastcgi.socket;
# используем upstream block
upstream fastcgi {
server 127.0.0.1:9000;
server 127.0.0.1:9001;
}
location ~* \.php$ {
fastcgi_pass fastcgi;
}
PHP и fastCGI
server {
listen 80;
server_name www.example1.com;
root /var/www/www.example1.com;
index index.php index.html index.htm;
try_files $uri $uri/ /index.php;
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
}
}
--------------------------------------------------------------------
Использование Upstream nginx в качестве proxy-сервера между браузером и backend-компьютером Apache, на котором выполняется серверный сценарий на языке программирования
upstream phpfpm {
server 192.168.0.50:9000;
server 192.168.0.51:9000;
server 192.168.0.52:9000;
}
server {
server_name website.com;
location ~* \.php$ {
fastcgi_pass phpfpm;
...
}
}
Установка приоритета выбора серверов
Балансировщик нагрузки
upstream php {
server 192.168.0.1:9000 weight=2;
server 192.168.0.2:9000;
}
upstream phpbackend {
server localhost:9000 weight=5;
server 192.168.0.1 max_fails=5 fail_timeout=60s;
server unix:/tmp/backend backup;
}
--------------------------------------------------------------------
Использование PHP с nginx и FastCGI
server {
server_name .website.com; (доменное имя сайта)
listen 80; (порт 80)
root /home/website/www; (корневая папка, откуда берутся файлы сайта)
index index.php; (имя индексного файла)
location ~* \.php$ { (для всех запросов, оканчивающихся на php запускается серверный сценарий на PHP)
fastcgi_pass 127.0.0.1:9000; (обработчик скрипотв PHP размещается на порту 9000)
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
include fastcgi_params; (включить еще какие-либо настройки)
}
}
--------------------------------------------------------------------
Использование Django с nginx и FastCGI
Необходимо установить Python-Flup и стартовать FastCGI процесс
[root@website.com www]# python manage.py runfcgi method=prefork host=127.0.0.1 port=9000 pidfile=/var/run/ django.pid
Далее настроить конфигурацию nginx
http {
server {
server_name .website.com;
listen 80;
root /home/website/www;
index index.html;
location / {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
include fastcgi_params;
}
}
}
Django Python и uWSGI
Установить модуль для nginx
http://projects.unbit.it/downloads/uwsgi-0.9.6.5.tar.gz
django_wsgi.py
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'testapp.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
В консоли запускаем
uwsgi --socket 127.0.0.1:3031 --pythonpath /var/www/ --pythonpath /var/www/testapp/ -w django_wsgi -M -T -d server.log –L
настройки nginx
server {
listen 80;
server_name www.example1.com;
location / {
root /var/www/testapp;
index index.php index.html index.htm;
}
location / {
uwsgi_pass 127.0.0.1:3031;
include uwsgi_params;
}
}
дополнительно можно написать сценарий django_usgi2.py:
import web
urls = (
'/(.*)', 'hello'
)
app = web.application(urls, globals())
class hello:
def GET(self, name):
if not name:
name = 'World'
return 'Hello, ' + name + '!'
application = app.wsgifunc()
Запустим из консоли
uwsgi -s /tmp/web.py.socket -w django_usgi2.py
Modifying FCGI
Изменим FastCGI timeouts
server {
listen 80;
server_name www.example1.com;
root /var/www/www.example1.com;
index index.php index.html index.htm;
fastcgi_read_timeout 120;
fastcgi_write_timeout 120;
try_files $uri $uri/ /index.php;
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
}
}
--------------------------------------------------------------------
использование nginx совместно с apache
Nginx в качестве reverse proxy
Переадресация запроса с nginx на Apache
proxy_pass http://localhost:8080;
proxy_pass http://127.0.0.1:8080;
proxy_pass http://unix:/tmp/nginx.sock;
proxy_pass https://192.168.0.1;
proxy_pass http://localhost:8080/uri/;
proxy_pass http://unix:/tmp/nginx.sock:/uri/;
proxy_pass http://$server_name:8080;
# Используем upstream block
upstream backend {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
location ~* \.php$ {
proxy_pass http://backend;
}
Proxy redirect
proxy_redirect off;
proxy_redirect default;
proxy_redirect http://localhost:8080/ http://example.com/;
proxy_redirect http://localhost:8080/wiki/ /w/;
proxy_redirect http://localhost:8080/ http://$host/;
Пример проксирования на другой сервер
server {
listen 80;
server_name example1.com;
access_log /var/www/example1.com/log/nginx.access.log;
error_log /var/www/example1.com/log/nginx_error.log debug;
location / {
include proxy.conf;
proxy_pass http://127.0.0.1:8080;
}
}
Проксирование на несколько серверов и балансировка нагрузки
upstream backend {
server backend1.example1.com weight=5;
server backend2.example1.com max_fails=3 fail_timeout=30s;
server backend3.example1.com;
}
server {
listen 80;
server_name example1.com;
access_log /var/www/example1.com/log/nginx.access.log;
error_log /var/www/example1.com/log/nginx_error.log debug;
location / {
include proxy.conf;
proxy_pass http://backend;
}
}
Конфигурирование Apache для проксирования с nginx
<VirtualHost A.B.C.D:8080>
ServerName example.com:8080
ServerAlias www.example.com
...
Order deny,allow
allow from 127.0.0.1
allow from 192.168.0.1
deny all
</VirtualHost>
Конфигурирование nginx для проксирования на Apache
upstream apache {
server 192.168.0.1:80;
server 192.168.0.2:80;
server 192.168.0.3:80 weight=2;
server 192.168.0.4:80 backup;
}
server {
server_name .example.com;
root /home/example.com/www;
...
location / {
proxy_pass http://apache;
}
}
Разделение ститчного и динамичного контента при проксировании
server {
server_name .example.com;
root /home/example.com/www;
...
location ~* \.php$ {
# Передача на Apache всех запросов, оканчивающихся на .php
proxy_pass http://127.0.0.1:8080;
}
location / {
# Опции для отдачи статичных файлов: css, kavascript, images, html
# например cache control, alias и так далее
expires 30d;
}
}
nginx -s stop (выйти немедленно)
nginx -s quit (выйти обычным образом)
nginx -s reopen (переоткрыть log файлы)
nginx -s reload (перезагрузить конфигурацию)
killall nginx (убить все сервера nginx)
nginx -t (протестировать конфигурацию)
Настройка nginx
Файл nginx/conf/nginx.conf
nginx.conf: (основной файл конфигурации сервера)
# это комментарий
user dima rabota; (имя системного пользователя и имя его грыппы под правами которого запущен сервер)
worker_processes 4; (число процессов сервера)
worker_priority 0; (приоритет процессов сервера над другими процессами в операционной системе)
log_not_found on; (записывать лог, если страница не найдена)
events {
worker_connections 1024; (число возможных одновременных соединений с сервером)
accept_mutex on;
accept_mutex_delay 500ms;
multi_accept off;
}
include mime.types (список расширений и ассоциаций файлов с ними)
include fastcgi.conf (настройки FastCGI)
include proxy.conf (настройки для proxy)
include sites.conf (настройки сайтов, то есть Virtual Hosts. Можно создать для них отдельный файл и подключать их через инклюд)
include other_settings.conf (включение сюда настроек из другого файла. обычный инклюд)
include sites/*.conf (включение всех файлов из папки)
--------------------------------------------------------------------
other_settings.conf:
error_log logs/error.log (определение папки для записи логов сервера)
pid logs/inginx.pid (определение папки для записи pid - идентификатора процесса сервера)
--------------------------------------------------------------------
Директивы, как в Apache, только вместо треугольных скобок <Directory >...</Directory>, скобки http {...}, как в JavaScript.
Таким образом
Apache - это HTML-тэги
Enginx - это JavaScript-объекты (хэш-массивы)
http {
server {
listen 80; (порт 80)
server_name example.com; (доменное имя)
access_log /var/log/nginx/example.com.log; (папка записи логов сервера для этого сайта)
location ^~ /admin/ { (при переходе по URL /admin/ Из папки домашеного пользователя взять файл index.php)
index.php;
access_log off; (лог по этому адресу не записывать)
access_log log/main.log; (записывать логи для URL /admin/ в эту папку)
log_format main '$pid - $nginx_version - $remote_addr'; (записывать логи в таком формате)
log_not_found on; (записывать лог, если страница не найдена)
}
}
}
--------------------------------------------------------------------
Правила для реврайта адресов
rewrite ^/(.*)\.(png|jpg|gif)$ /image.php? file=$1&format=$2 last;
--------------------------------------------------------------------
Определение размера передачи данных
client_max_body_size 2M;
или
client_max_body_size 2048k;
--------------------------------------------------------------------
Установка времени ожидания таймаута
client_body_timeout 3m;
client_body_timeout 180s;
client_body_timeout 180;
--------------------------------------------------------------------
Пример создания тестового сервера
http {
include mime.types;
defautl_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost; (http://localhost/)
location / {
root html; (главное расширение файла)
index index.html index.htm; (главная индексная страница. Могла бы быть и index index.php)
}
error_page 500 502 503 504 /50x.html
location = /50x.html {
root html;
}
}
}
--------------------------------------------------------------------
Базовая конфигурация сервера под сайт.
Структура всегда такая: http / server / location
http - размещаются директивы общие для всех сайтов HTTP
server - прописывается IP, PORT, HOST-доменный адрес сайта
location - настройки для конкретного URL сайта
Пример
http {
gzip on;
server {
listen 80;
server_name localhost;
location /main/ {
...
}
location /downloads/ {
gzip off;
...
}
}
}
Варианты записи директив.
Прослушивать переход по IP-адресу и порту
listen 192.168.1.1:80;
listen 127.0.0.1;
listen 80 default;
listen 443 ssl;
Доменное имя сайта
server_name www.website.com;
server_name www.site1.com site2.com site3.com;
server_name *.website.com;
server_name .website.com;
server_name *.website.*;
server_name ~^\.example\.com$;
Пути до файлов
root /home/website.com/public_html; (корневая директория сайта)
Установка alias соотвествия URL с папкой, где лежат файлы
http {
server {
server_name localhost;
root /var/www/website.com/html; (основная папка, где хранятся файлы сайта)
location /admin/ {
alias /var/www/locked/; (при переходе URL /admin/ взять файлы из папки /var/www/locked/)
}
}
}
Вывод страницы об ошибке
error_page 404 /not_found.html;
error_page 500 501 502 503 504 /server_error.html;
error_page 403 http://website.com/;
error_page 404 @notfound; # перейти на named location block
error_page 404 =200 /index.html; # в случае ошибки 404 сделать редирект на файл index.html с 200 OK response code
Определение главной страницы сайта index
index index.php index.html index.htm;
index index.php index2.php /catchall.php;
Обслуживание запросов бразера.
keepalive_requests 100; (число поддержания одновременных запросов со стороны браузера)
Таймаут запросов
keepalive_timeout 75; (время удержания подключения)
keepalive_timeout 75 60;
Установка MimeTypes
include mime.types;
types {
mimetype1 extension1;
mimetype2 extension2 [extension3…];
[…]
}
Пример 1
http {
include mime.types;
[…]
location /downloads/ {
types { } # удалить все MIME types
default_type application/octet-stream; (установить тип MimeType по умолчанию)
}
[…]
}
Пример 2
http {
include mime.types;
[…]
location /downloads/ {
types {
text/html html;
image/gif gif;
image/jpeg jpg;
}
default_type text/plain; (установить тип MimeType по умолчанию)
}
[…]
}
Ограничить тип подключения, выбрав GET или POST
location /admin/ {
limit_except GET { (ограничить подключение только типом GET)
allow 192.168.1.0/24; (разрешить подключение только с этого IP-адреса)
deny all; (всем остальным запретить)
}
}
limit_except METHOD1 [METHOD2…] {
allow | deny | auth_basic | auth_basic_user_file | proxy_pass | perl;
}
Включить бэйсик авторизэйшон
location /admin/ {
allow 192.168.1.0/24;
deny all;
auth_basic "Authentication required"; (включить базовую авторизацию)
auth_basic_user_file conf/htpasswd; (логин и пароль сверять с файлом из этой папки)
}
Разрешить переход по этому адресу только с локального компьютера
server {
server_name .website.com;
location /admin/ {(на этот адрес можно перейти только с локального компьютера, на котором установлен сервер. Все остальные браузеры получат страницу 404 Not found)
internal;
}
}
Объединять двойные // в один /
merge_slashes off;
Пример
было http://website.com//documents/
стало http://website.com/documents/
Включить правильное отображение страниц с ошибкой 400 и выше в Internet Explorer
msie_padding on;
Уустановка правильного обновления Refresh страницы для Internet Explorer
msie_refresh on;
Разрешить использовать символ _ в серверных заголовках
underscores_in_headers on;
Запустить особый сценарий после выполнения запроса сервером.
location /payment/ {
post_action /scripts/done.php; (запустить это сценарий на сервере после отсылки страницы браузеру)
}
Переменные, хранящие заголовки Request
$http_host - доменное имя из адресной строки (URL сайта)
$http_user_agent - ,hfepth gjkmpjdfntkz
$http_referer - URL-страницы с которой переше пользователь
$http_via - перечень proxy-серверов, которые использовал пользователе\ь
$http_x_forwarded_for - Ip-адрес клиента, если клиент прячется за proxy
$http_cookie - значение куки в браузере пользователя
$http_... - любые другие установленные значения, которые можно получить
Переменные, хранящие заголовки Response
$sent_http_content_type - указан тип MimeType контента
$sent_http_content_length - указана величина body
$sent_http_content_location - указан location ресурса
$sent_http_last_modified - дата модификации контента
$sent_http_connection - поддерживается соединение keep-alive или оно закрыто closed
$sent_http_keep_alive - сколько времени будет поддерживаться соединение keep alive
$sent_http_transfer_encoding - кодировка тела ответа (например оно заархивировано gzip)
$sent_http_cache_control - должен ли браузер кэшировать страницу на своей стороне или нет
$sent_http_... - любые другие установленные значения, которые можно получить
Некоторые другие переменные, генерируемые Nginx
$content_length - длина ответа
$content_type - тип содержимого ответа
$cookie_XXX - выбрать куки с именем XXX
$document_root - адрес корневой папки сайта
$document_uri - текущий URL запроса
$host - доменное имя сайта в URL
$hostname - системное имя компьютера, на котором установлен сервер
$nginx_version - версия сервера
$pid - pid сервера
$query_string - строка запроса в URL после знака ? (тоже самое, что и $args)
$remote_addr - IP-адрес браузера клиента
$remote_port - порт браузера клиента
$remote_user - имя клиента, если он авторизован
$realpath_root - document root в запросе request клиента
$request_body - тело ответа клиенту
$request_method - тип запроса GET или POST
$scheme - схема http или https
$server_addr - IP-адрес компьютера, на котором установлен сервер
$server_name - имя компьютера, на котором установлен сервер
$server_port - порт, на котором установлен сервер
$server_protocol - используемый HTTP-протокол HTTP/1.0 или HTTP/1.1
$uri - тоже самое, что и $document_uri
--------------------------------------------------------------------
Способы задания Location
http {
server {
server_name website.com;
location /abcd {
...
}
location ~ ^/abcd$ {
...
}
location ~* ^/abcd$ {
...
}
location /files/ {
...
}
location = /files/ {
...
}
location /doc {
# requests beginning with "/doc"
}
location ~* ^/document$ {
# requests exactly matching "/document"
}
location /document {
# requests beginning with "/document"
}
location ~* ^/document$ {
# requests exactly matching "/document"
}
location ^~ /doc {
# requests beginning with "/doc"
}
location ~* ^/document$ {
# requests exactly matching "/document"
}
}
}
--------------------------------------------------------------------
Переписывание адресов через регулярные выражения модуля Rewrite
rewrite "hel{2,}o" /hello.php;
rewrite 'hel{2,}o' /hello.php;
--------------------------------------------------------------------
захват значений из URL-адреса размещенных внутри скобок в переменные nginx
PATTERN ^(hello|hi) (sir|mister)$
STRING hello sir
VARIABLES $1 = hello $2 = sir
PATTERN ^(.*)$
STRING nginx rocks
VARIABLES $1 = nginx rocks
PATTERN ^(.{1,3})([0-9]{1,4})([?!]{1,2})$
STRING abc1234!?
VARIABLES $1 = abc $2 = 1234 $3 = !?
Пример
server {
server_name website.com;
location ~* ^/(downloads|files)/(.*)$ {
add_header Capture1 $1;
add_header Capture2 $2;
}
}
--------------------------------------------------------------------
Вывод страниц с сообщениемя об ошибках
server {
server_name website.com;
error_page 403 /errors/forbidden.html; (при ошибке 403 взять страницу из этой папки)
error_page 404 /errors/not_found.html; (при ошибке 404 взять страницу из этой папки)
}
server {
server_name website.com; (доменное имя сайта)
root /var/www/vhosts/website.com/httpdocs/; (корневая папка, где лежат файлы сайта)
error_page 404 /errors/404.html; (при ошибке 404 взять страницу из этой папки)
location /errors/ {
alias /var/www/common/errors/; (при переходе по адресу /errors/ взять файлы из этой папки)
internal; (страница по адресу /errors/ доступна только с локального компьютера, на котором установлен сервер)
}
}
--------------------------------------------------------------------
Переписывание URL-адреса Rewrite при переходе на страницу
server {
server_name website.com;
root /var/www/vhosts/website.com/httpdocs/;
location /storage/ {
internal;
alias /var/www/storage/;
}
location /documents/ { (при переходе на страницу переписывание адреса с documents на storage)
rewrite ^/documents/(.*)$ /storage/$1; (производится редирект на другой адрес)
}
}
Бесконечный цикл перехода
server {
server_name website.com;
location /documents/ {
rewrite ^(.*)$ /documents/$1;
}
}
--------------------------------------------------------------------
Включение Server Side Includes
<html>
<head>
<!--# include file="header.html" -->
</head>
<body>
<!--# include file="body.html" -->
<!--# include virtual="/footer.php?id=123" -->
</body>
</html>
Разрешить SSI
server {
server_name website.com;
location ~* \.shtml$ {
ssi on; (разрешить инклюды для этого адреса)
}
}
Команды SSI
<!--# include file="header.html" -->
<!--# include virtual="/sources/header.php?id=123" -->
<!--# include virtual="header.php" wait="yes" -->
<!--# set var="MY_VARIABLE" value="hello" -->
<!--# echo var="MY_VARIABLE" -->
<!--# set var="MY_VARIABLE" value="$MY_VARIABLE there" -->
<!--# echo var="MY_VARIABLE" -->
<!--# if expr="expression1" -->
...
<!--# elif expr="expression2" -->
...
<!--# else -->
...
<!--# endif -->
<!--# config errmsg="Something terrible happened" -->
<!--# config timefmt="%A, %d-%b-%Y %H:%M:%S %Z" -->
--------------------------------------------------------------------
Условная обработка запросов GET и POST на стороне сервера
server {
if ($request_method = GET) {
...
}
if ($request_method = POST) {
...
}
if ($uri ~ /search/) {
...
}
}
--------------------------------------------------------------------
Частые правила переписывания URL страниц
Поиск для сайта
Input URI http://website.com/search/some-search-keywords
Rewritten URI http://website.com/search.php?q=some-search-keywords
Rewrite rule rewrite ^/search/(.*)$ /search.php?q=$1?;
Просмотр профиля пользователя
Input URI http://website.com/user/31/James
Rewritten URI http://website.com/user.php?id=31&name=James
Rewrite rule rewrite ^/user/([0-9]+)/(.+)$ /user.php?id=$1&name=$2?;
Передача нескольких параметров в URL
Input URI http://website.com/index.php/param1/param2/param3
Rewritten URI http://website.com/index.php?p1=param1&p2=param2&p3=param3
Rewrite rule rewrite ^/index.php/(.*)/(.*)/(.*)$ /index.php?p1=$1&p2=$2&p3=$3?;
Как на Wikipedia
Input URI http://website.com/wiki/Some_keyword
Rewritten URI http://website.com/wiki/index.php?title=Some_keyword
Rewrite rule rewrite ^/wiki/(.*)$ /wiki/index.php?title=$1?;
Показать статью на новостном сайте
Input URI http://website.com/33526/us-economy-strengthens
Rewritten URI http://website.com/article.php?id=33526
Rewrite rule rewrite ^/([0-9]+)/.*$ /article.php?id=$1?;
Форум
Input URI http://website.com/topic-1234-50-some-keywords.html
Rewritten URI http://website.com/viewtopic.php?topic=1234&start=50
Rewrite rule rewrite ^/topic-([0-9]+)-([0-9]+)-(.*)\.html$ /viewtopic.php?topic=$1&start=$2?;
--------------------------------------------------------------------
Задание главной страницы сайта
index index.php index.html index.htm;
index index.php index2.php /catchall.php;
--------------------------------------------------------------------
Включение автоиндексации файлов в папках сайта, если нет индексного файла
http {
server {
location / {
autoindex on;
}
}
}
--------------------------------------------------------------------
Включение базовой авторизации Basic Authtorization
location /admin/ {
auth_basic "Admin control panel";
auth_basic_user_file access/password_file;
}
--------------------------------------------------------------------
Разрешение доступак к странице только с определенного IP-адреса
location {
allow 127.0.0.1; # allow local IP address
deny all; # deny all other IP addresses
}
--------------------------------------------------------------------
Размещение empty gif по адресу, указанному в location
location = /empty.gif {
empty_gif;
}
--------------------------------------------------------------------
Обработка адресов для FLV
location ~* \.flv {
flv;
}
--------------------------------------------------------------------
Добавление HTTP заголовков
add_before_body file_uri;
add_after_body file_uri;
--------------------------------------------------------------------
Memcached
Memcached - это фоновое приложение, которе может быть подсоединено через соекты. Основное его назначение это кэширование данных в пямяти по принципу ключ-значение.
Модуль Nginx Memcached предлагает директивы для доступа к фоновум демону Memcached.
memcached_pass localhost:8888 (задает хост и порт на котором работает программа Memcached)
memcached_connect_timeout 5000;
memcached_send_timeout 5,000;
Пример
server {
server_name example.com;
location / {
set $memcached_key $uri;
memcached_pass 127.0.0.1:8888;
error_page 404 @notcached;
}
location @notcached {
internal;
# Если файл не найден то переадресовать на proxy-сервер
proxy_pass 127.0.0.1:8080;
}
}
Пример Memcached
server {
server_name www.example1.com;
location / {
set $memcached_key $uri;
memcached_pass 127.0.0.1:11211;
default_type text/html;
error_page 404 @fallback;
}
location @fallback {
proxy_pass http://backend;
}
}
--------------------------------------------------------------------
Возможно также:
Обработка картинок средствами сервера nginx
Обработка XSLT средствами сервера nginx
--------------------------------------------------------------------
Установка Real IP
real_ip_header X-Forwarded-For;
set_real_ip_from 192.168.0.0/16;
set_real_ip_from 127.0.0.1;
--------------------------------------------------------------------
Включение SSL-шифрования
server {
listen 443;
server_name secure.website.com;
ssl on;
ssl_certificate /path/to/combined.crt;
ssl_certificate_key /path/to/secure.website.com.key;
...
}
Пример
http {
...
ssl_certificate common.crt;
ssl_certificate_key common.key;
server {
listen 80;
server_name www.example1.com;
location / {
...
}
}
server {
listen 443 default ssl;
server_name payment.example1.com;
location / {
...
}
}
server {
listen 80;
listen 443;
server_name static.example1.com;
location / {
root /var/www/www.example1.com/static;
}
}
--------------------------------------------------------------------
Установка Secure link
location /downloads/ {
secure_link_secret "secret";
if ($secure_link = "") {
return 403;
}
rewrite ^ /downloads/$secure_link break;
}
--------------------------------------------------------------------
Включение FastCGI для подключения языка программирования к серверу PHP, Python. Ruby
fastcgi_pass localhost:9000;
fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/tmp/fastcgi.socket;
# используем upstream block
upstream fastcgi {
server 127.0.0.1:9000;
server 127.0.0.1:9001;
}
location ~* \.php$ {
fastcgi_pass fastcgi;
}
PHP и fastCGI
server {
listen 80;
server_name www.example1.com;
root /var/www/www.example1.com;
index index.php index.html index.htm;
try_files $uri $uri/ /index.php;
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
}
}
--------------------------------------------------------------------
Использование Upstream nginx в качестве proxy-сервера между браузером и backend-компьютером Apache, на котором выполняется серверный сценарий на языке программирования
upstream phpfpm {
server 192.168.0.50:9000;
server 192.168.0.51:9000;
server 192.168.0.52:9000;
}
server {
server_name website.com;
location ~* \.php$ {
fastcgi_pass phpfpm;
...
}
}
Установка приоритета выбора серверов
Балансировщик нагрузки
upstream php {
server 192.168.0.1:9000 weight=2;
server 192.168.0.2:9000;
}
upstream phpbackend {
server localhost:9000 weight=5;
server 192.168.0.1 max_fails=5 fail_timeout=60s;
server unix:/tmp/backend backup;
}
--------------------------------------------------------------------
Использование PHP с nginx и FastCGI
server {
server_name .website.com; (доменное имя сайта)
listen 80; (порт 80)
root /home/website/www; (корневая папка, откуда берутся файлы сайта)
index index.php; (имя индексного файла)
location ~* \.php$ { (для всех запросов, оканчивающихся на php запускается серверный сценарий на PHP)
fastcgi_pass 127.0.0.1:9000; (обработчик скрипотв PHP размещается на порту 9000)
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
include fastcgi_params; (включить еще какие-либо настройки)
}
}
--------------------------------------------------------------------
Использование Django с nginx и FastCGI
Необходимо установить Python-Flup и стартовать FastCGI процесс
[root@website.com www]# python manage.py runfcgi method=prefork host=127.0.0.1 port=9000 pidfile=/var/run/ django.pid
Далее настроить конфигурацию nginx
http {
server {
server_name .website.com;
listen 80;
root /home/website/www;
index index.html;
location / {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
include fastcgi_params;
}
}
}
Django Python и uWSGI
Установить модуль для nginx
http://projects.unbit.it/downloads/uwsgi-0.9.6.5.tar.gz
django_wsgi.py
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'testapp.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
В консоли запускаем
uwsgi --socket 127.0.0.1:3031 --pythonpath /var/www/ --pythonpath /var/www/testapp/ -w django_wsgi -M -T -d server.log –L
настройки nginx
server {
listen 80;
server_name www.example1.com;
location / {
root /var/www/testapp;
index index.php index.html index.htm;
}
location / {
uwsgi_pass 127.0.0.1:3031;
include uwsgi_params;
}
}
дополнительно можно написать сценарий django_usgi2.py:
import web
urls = (
'/(.*)', 'hello'
)
app = web.application(urls, globals())
class hello:
def GET(self, name):
if not name:
name = 'World'
return 'Hello, ' + name + '!'
application = app.wsgifunc()
Запустим из консоли
uwsgi -s /tmp/web.py.socket -w django_usgi2.py
Modifying FCGI
Изменим FastCGI timeouts
server {
listen 80;
server_name www.example1.com;
root /var/www/www.example1.com;
index index.php index.html index.htm;
fastcgi_read_timeout 120;
fastcgi_write_timeout 120;
try_files $uri $uri/ /index.php;
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
}
}
--------------------------------------------------------------------
использование nginx совместно с apache
Nginx в качестве reverse proxy
Переадресация запроса с nginx на Apache
proxy_pass http://localhost:8080;
proxy_pass http://127.0.0.1:8080;
proxy_pass http://unix:/tmp/nginx.sock;
proxy_pass https://192.168.0.1;
proxy_pass http://localhost:8080/uri/;
proxy_pass http://unix:/tmp/nginx.sock:/uri/;
proxy_pass http://$server_name:8080;
# Используем upstream block
upstream backend {
server 127.0.0.1:8080;
server 127.0.0.1:8081;
}
location ~* \.php$ {
proxy_pass http://backend;
}
Proxy redirect
proxy_redirect off;
proxy_redirect default;
proxy_redirect http://localhost:8080/ http://example.com/;
proxy_redirect http://localhost:8080/wiki/ /w/;
proxy_redirect http://localhost:8080/ http://$host/;
Пример проксирования на другой сервер
server {
listen 80;
server_name example1.com;
access_log /var/www/example1.com/log/nginx.access.log;
error_log /var/www/example1.com/log/nginx_error.log debug;
location / {
include proxy.conf;
proxy_pass http://127.0.0.1:8080;
}
}
Проксирование на несколько серверов и балансировка нагрузки
upstream backend {
server backend1.example1.com weight=5;
server backend2.example1.com max_fails=3 fail_timeout=30s;
server backend3.example1.com;
}
server {
listen 80;
server_name example1.com;
access_log /var/www/example1.com/log/nginx.access.log;
error_log /var/www/example1.com/log/nginx_error.log debug;
location / {
include proxy.conf;
proxy_pass http://backend;
}
}
Конфигурирование Apache для проксирования с nginx
<VirtualHost A.B.C.D:8080>
ServerName example.com:8080
ServerAlias www.example.com
...
Order deny,allow
allow from 127.0.0.1
allow from 192.168.0.1
deny all
</VirtualHost>
Конфигурирование nginx для проксирования на Apache
upstream apache {
server 192.168.0.1:80;
server 192.168.0.2:80;
server 192.168.0.3:80 weight=2;
server 192.168.0.4:80 backup;
}
server {
server_name .example.com;
root /home/example.com/www;
...
location / {
proxy_pass http://apache;
}
}
Разделение ститчного и динамичного контента при проксировании
server {
server_name .example.com;
root /home/example.com/www;
...
location ~* \.php$ {
# Передача на Apache всех запросов, оканчивающихся на .php
proxy_pass http://127.0.0.1:8080;
}
location / {
# Опции для отдачи статичных файлов: css, kavascript, images, html
# например cache control, alias и так далее
expires 30d;
}
}
среда, 13 февраля 2013 г.
Краткое руководство по директивам Apache
Очень хорошая книга.
Администрирование Web-сервера Apache и руководство по электронной коммерции. Скотт Хокинс.
Запись правил в Apache производится HTML-тэгами.
Запись правил в Nginx производится как в JavaScript через объекты и фигурные скобки http {}.
Apache2.2/conf/httpd.conf - главный конфигурационный файл сервера. В нем задаются: имя сервера, сетевые установки, виртуальный хостинг.
Режим работы сервера.
ServerType standalone
Задание имени ситемного пользователя и его группы.
User apache
Group 506
Ограничить зону действия директив DirectiveA каталогом /home/site2 и всеми подкаталогами, содержащимися в нем.
<Directory /home/site2>
DirectoryA
</Directorry
Ограничить зону действия директив DirectiveA диапазоном каталогом, содержащим регулярное выражение /home/site[1-3] и всеми подкаталогами, содержащимися в нем.
<Directory "/home/site[1-3]">
DirectoryA
</Directory
.htaccess
Ограничить зону действия директив DirectiveA через рамещение файла .htaccess в каталоге с файлами, по отношению к которому эти директивы будут применяться.
В конфиге для использования файлов .htaccess необходимо прописать AllowOverride ALL
Ограничить зону действия директив DirectiveA по URL.
<Location /status>
SetHandler server-status
</Location>
<Location /secure_stuff>
order deny, allow
deny from all
allow from 127.0.0.1
</Location>
Ограничить зону действия директив DirectiveA по URL, содержащим регулярное выражение /status[1-3].
<LocationMatch "/status[1-3]">
SetHandler server-status
</Location>
Ограничить зону действия директив DirectiveA применительно к отдельному файлу.
<Files .htaccess>
Order deny, allow
Deny from all
</Files>
Ограничить зону действия директив DirectiveA применительно к нескольким файлам. определенным по отдельному регулярному выражению /pic[1-3].jpg.
<FilesMatch "/pic[1-3].jpg">
Order deny, allow
Deny from all
</FilesMatch>
Используемые директивы внутри скобок <Directory >, <Location >, <Files >
AllowOverride All - разрешить перезаписать сходные директивы в файле .htaccess
AllowOverride None - запретить перезаписать сходные директивы в файле .htaccess
order allow, deny - задать порядок следования ниже лежащих директив (разрешить, затем запретить)
order deny, allow - задать порядок следования ниже лежащих директив (запретить, затем разрешить)
allow - задать IP-адрес или доменное имя, которому будет разрешен запрос к серверу.
deny - задать IP-адрес или доменное имя, которому будет запрещен запрос к серверу.
allow from all - разрешить всем IP-адресам или доменным именам отправлять запрос к серверу.
deny from all - запретить всем IP-адресам или доменным именам отправлять запрос к серверу.
Задать папку в которой по умолчанию будут располагаться все HTML-файлы.
DocumentRoot /opt/apache/htdocs
Задать папку в которой будут размещаться домашние страницы пользователя.
UserDir public_html
Задать дефолтные имена файлов, которые будут являться главными HTML-файлами
DirectoryIndex index.html index.htm index.cgi index.shtml (Пример http://www.site.com/ Запустит файл index.html)
AccessFileName .htaccess - эта директива задает имя файла в котором в случае его обнаружения в обычной папке можно будет наути директивы управления доступом.
Задать тип MimeType по умолчанию, если MimeType сервер не смог определить.
DefaultType text/plain
Задание связывания соотвествия URL-адреса месту расположения файлов в папке на жестком диске сервера.
Alias /icons/ /usr/local/etc/httpd/icons/ (Alias /адрес/ /папка/на/жестком/диске/с/картинками/например/)
Задание связывания соотвествия URL-адреса месту расположения сценарием на языке программирования в папке на жестком диске сервера.
ScriptAlias /cgi-bin/ /usr/local/etc/httpd/cgi-bin/ (ScriptAlias /адрес/ /папка/на/жестком/диске/с/php/кодом/например/)
Добавить ассоциацию с Mimetype
AddType
Добавление ассоциации с типом MimeType
AddType application/x-httpd-php .php
Тип MimeType По умолчанию.
DefaultType text/html
Определение требуемых характеристик железа для сервера Apache.
Определение браузера по user-agent. Вывод содержимого по для определенного браузера.
BrowseMatch Mozilla/2 nokeepalive
Адрес электронной почты администратора сервера.
ServerAdmin you@yoursite.org
Корневой каталог сервера, куда установлен Apache. Относительного этого каталога можно задавать относительные пути.
ServerRoot /opt/apache
Задание IP-адреса локального компьютера, на котором установлен Apache. Если на компьютере только один сетевой интерфейс, то эту директиву задавать не стоит, так как по умолчанию сервер прослушивает все соединения.
Чтобы Apache поддерживал только один IP-адрес задайте:
BindAddress 192.169.1.10
Чтобы Apache игнорировал все запросы исходящие не от локального компьютера задайте:
BindAddress 127.0.0.1
Для работы со всеми возможными соединениями задайте:
BindAddress *
BindAddress может быть задан только 1 раз.
При необходимости прослушивать 2 и более IP-адреса, но не все возможные, используйте директиву Listen.
Определение папки для записи файла логов об ошибках.
ErrorLog logs/error_log (относительно папки, где установлен сервер)
или
ErrorLog /var/logs/apache (абсолютный адрес)
Определение папки для записи файла логов об обменен данными сервера с внешним миром.
TransferLog logs/access_log
Задание имени сервера, которое будет отсылаться браузерам вместо имени компьютера.
ServerName www.example.com
Разрешить proxy-серверам кэшировать заголовки.
CacheNegotiatedDocs
Ограничение времени существования неактивных соединений.
Timeout 150 (секунд)
Ращрешить поддержание устойчивых соединений, которые позволяют брузеру запросить более одного блока данных одновременно. Включение этой опции полезно всем.
KeepAlive On
Установка максимального числа запросов разрешенных во время одного устойчивого соединения. Значение 0 означает Неограниченно.
MaxKeepAliveRequest 0
Задание количества секунд, на протяжении которых во время устойчивого соединения сервер будет ожидать следующего запроса.
KeepAliveTimeout 15
Установка количества одновременно подключенных к серверу браузеров.
MaxClients 150
Запус и тестирование сервера из командной строки.
apachectl configtest
apechectl start
Виртуальный хостинг.
Папка пользователя. Такой подход используется редко.
UserDir somedirectory - эта директива предназначена для того, чтобы показать, что Web-содержимое будет найдено в конкретном подкаталоге корневого каталога пользователя.
Когда работает эта директива сервер принимает запросы в виде:
http://www.example.com/~userguy
В результате файлы будут взяты из папки /home/userguy/somedirectory
Например
http://www.example.com/~timmy/x-files.html
UserDir /var/user/webspace
Файл взят из папки /var/user/webspace/timmy/x-files.html
Задание прослушивания только одногопорта.
Port 4444
Задание прослушивания одного или более IP-порта
Listen 80
Listen (пусто - значит локальный порт)
Можно использовать для задания прослушивания определенных IP-адресов
Listen 192.168.1.2:80
Listen 192.168.1.2: (все порты)
Виртуальный хостинг по имени. Самый распространеный.
Необходимо:
1. С помощью директивы NameVirtualHost определить IP-адрес, который будет использоваться для виртуального хоста.
2. С помощью пары директив VirtualHost выделить директивы, которые будут иметь отношение только к определенному виртуальному Web-узлу.
NameVirtualHost 192.168.1.1:80
Запуск виртуального хостинга.
<VirtualHost 192.168.1.1>
ServerName www.example.org (Обязательно нужно прописывать ServerName для IP-адреса)
DocumentRoot /some/other/directory (Обязательно нужно прописывать DocumentRoot, чтобы из папки брались файлы)
</VirtualHost>
или
<VirtualHost www.idiots.org> (ServerName прописывать не нужно)
DocumentRoot /some/other/directory (Обязательно нужно прописывать DocumentRoot, чтобы из папки брались файлы)
</VirtualHost>
Что можно добавить внутрь скобок <VirtualHost >
ServerName www.site2.com - доменное имя сайта
DocumentRoot /home/site2 - адрес папки с файлами для сайта
ServerAdmin admin@site2.com - почтовый адрес администратора сайта
ErrorLog /home/logs - адрсе папки для записи логов сервера для сайта
transferLog /home/trans - адрес папки для записи логов передачи данных от сервера для сайта
Директивы, которые нельзя прописывать внутри скобок виртуального хостинга
BindAddress
Listen
MaxSpareServers
MinSpareServers
MaxRequestPerChild
PidFile
ServerRoot
ServerType
TypeConfig
NameVirtualHost
Отстальное можно.
Proxy-сервер - это сервер посредник для обслуживания внешнего или внутреннего трафика при передаче запросо от компьютера к компьютеру.
Можно настроить proxy на обработку запросов поступающих на порт отличный от стандартного (80).
Listen 8888
<VirtuaHost 192.168.100.1:8888>
... директивы ...
</VirtuaHOst>
Настройка Proxy-сервера.
Для запуска proxy-сервера достаточно прописать одну директиву
Proxe-Requests On
Далее идет настройка proxy-сервера на прослушивание входящего трафика по порту 8888.
А потом для работы соэтим портом создается виртуальный хост с адресом prxoy.asgard.com
Listen 8888
<VirtualHost 192.168.100.1:8888>
ServerName proxy.asgard.com
ProxyRequests On
</VirtualHost>
Ограничение доступа к определенным сайтам.
ProxyBlock kiddiporn.com snuffulm.org (proxy-сервер не даст посмотреть эти сайты при прохождении запроса через себя)
Пересылка запросов на другие proxy-серверы.
ProxyRemote ftp http://ftpsrvr.local.com:8080 (пересылка запроса дальше)
Задание запрета на проксирование.
NoProxy .example.com (предотвратит переход запросов на удаленный proxy-сервер)
Зазеркаливание (Задание переадресации redirect) сайта.
ProxtPass /distant/mirror http://www.tuchman.edu (переадресует все локальные запросы к сайту http://www.example.edu/distant/mirror при наборе адреса http://www.tuchmnan.edu)
Задание домена по умолчанию для переводаьпроксирования на него (позволяет короче вбивать адрес)
ProxyDomain .example.com
Это позволит после введения краткого URL http://www получить доступ к сайту http://www.example.com
Управление доступом к Proxy-серверу с использоваением шаблонов для указания того, что все каталоги находятся под управлением proxy.
<Directory proxy:*>
order deny, allow
deny from список IP-адресов
allow from список IP-адресов
</Directory>
Для включения кэширования страниц необходимо задать адрес каталога в котором кэш будет располагаться и все.
CacheRoot /cache
Задание максимально рамера папки с кэшем
CacheSize 10240 (10 мегабайт)
Задание ограничения глубины вложенности создания папокпри кэшировании внутри папки CacheRoot
CacheDirLevels 3 (3 уровня вглубь папки CacheRoot)
Задание ограничения длины пути к кэш-файлам
CacheDirLength 25 (предел длины имен подкатлогов 25 символов)
Задание срока хранения кэша
CacheMaxExpire - максиму времени хранения в часах
CacheDefaultExpire - если файл поступает без срока то ставится время хранения по умолчанию
CacheLastModifiedFactor - если файл поступает без срока то вычисляется время хранения от текущего времени до времени последней модификации файла и умножается на этот коэффициент
Задание интервалов между удалениями просроченного кэше (Периодичность дуланения) в часах
CacheInterval 10.5 (10 часов 30 минут)
CacheIntervel .5 (30 минут)
Отключение директивы кэширования для файлов сайта
NoCache news www.fool.com
NoCache * (полностью отключить кэширования для всего)
Настройка формата записи логов.
LogFormat "Host=%h Date=%t BytesReturned=%b"
Отказ в подступе при попытке загрузки файлов из папки.
<Directory />
Order deny, allow
Deny from all
</Directory>
<Directory /opt/apache/htdocs>
Order deny, allow
Allow from all
</Directory>
Запретить перезапись директив в .htaccess
AllowOverrides None
Разрешить доступ к файлам.
<Directory /some/directory>
Allow from all
</Directory>
<Directory /some/directory>
order deny, allow
deny from all
allow from fenris.asgard.com
</Directory>
<Directory /some/directory>
order deny, allow
deny from all
allow from 192.168.100.0/255.255.252.0
</Directory>
Разрешить доступ только из определенного браузера.
BrowserMatch ^Mozill netscape_yes
<Directory /some/directory>
order deny, allow
deny from all
allow from env==netscape_yes
</Directory>
Задание типа бэйсик идентификации
<Directory /some/directory>
AuthName "Example of Access Control"
AuthType Basic
AuthUserFile /etc/security/.htpasswd
Require valid-user
</Directory>
зазадние страницы для авторизации
ErrorDocument 401 /site_error.html
Включение шифрования SSL
NameVirtualHost 64.22.73.226
<VirtualHost 64.82.73.226>
ServerName www.securesite.com
DocumentRoot /home/site3
SSLEngine on
SSLCertificate /var/ssl/server.crt
SSLCACertificateFile /path/to/certificate
SSLLog /var/log/ssllog
SSLLogLevel warn
</VirtualHost>
Можно еще добавить
SSLCertificetKeyFile /var/ssl/server.key
SSLCACertificatePath /some/secure/directory
SSLVerifyClient 1
SSLVerifyDepth 3
Включени инклюдов в HTML на стороне сервера.
<Location /ssdir>
Options +Include
</Location>
Включения режима исполнения скрипотв на языках программирования CGI.
<Directory /usr/local/cgi-bin>
Options +ExecCGI
</Directory>
Задания привязок URL к папкам со скриптами на языках программирования.
ScriptAlias /cgi-bin/ /usr/local/cgi-bin/
Пометить всю папку, как папку с исполняемыми скриптами.
<Directory /usr/loacl/cgi-bin>
SetHandler cgi-script
<Directory>
Определение типа файлов как исполняемые.
AddHandler cgi-script .pl .cgi
Задание MimeType файлов
AddType application/x-httpd-cgi .pl
Задание папки записи логов в cgi-скриптах
ScriptLog /var/logs/cgilog
Переадресация через mod_rewrite
Rewriteengine On - включение режима перезаписи URL
RewriteRule ^/$ /apache backup [R] - задание переадресации
RewriteCond
Интересно до стр 150
Пример файл /etc/hosts
192.168.100.1 odin.example.com
192.168.100.80 fenris.asgard.com fenris
192.168.100.10 loki.asgard.com loki
Администрирование Web-сервера Apache и руководство по электронной коммерции. Скотт Хокинс.
Запись правил в Apache производится HTML-тэгами.
Запись правил в Nginx производится как в JavaScript через объекты и фигурные скобки http {}.
Apache2.2/conf/httpd.conf - главный конфигурационный файл сервера. В нем задаются: имя сервера, сетевые установки, виртуальный хостинг.
Режим работы сервера.
ServerType standalone
Задание имени ситемного пользователя и его группы.
User apache
Group 506
Ограничить зону действия директив DirectiveA каталогом /home/site2 и всеми подкаталогами, содержащимися в нем.
<Directory /home/site2>
DirectoryA
</Directorry
Ограничить зону действия директив DirectiveA диапазоном каталогом, содержащим регулярное выражение /home/site[1-3] и всеми подкаталогами, содержащимися в нем.
<Directory "/home/site[1-3]">
DirectoryA
</Directory
.htaccess
Ограничить зону действия директив DirectiveA через рамещение файла .htaccess в каталоге с файлами, по отношению к которому эти директивы будут применяться.
В конфиге для использования файлов .htaccess необходимо прописать AllowOverride ALL
Ограничить зону действия директив DirectiveA по URL.
<Location /status>
SetHandler server-status
</Location>
<Location /secure_stuff>
order deny, allow
deny from all
allow from 127.0.0.1
</Location>
Ограничить зону действия директив DirectiveA по URL, содержащим регулярное выражение /status[1-3].
<LocationMatch "/status[1-3]">
SetHandler server-status
</Location>
Ограничить зону действия директив DirectiveA применительно к отдельному файлу.
<Files .htaccess>
Order deny, allow
Deny from all
</Files>
Ограничить зону действия директив DirectiveA применительно к нескольким файлам. определенным по отдельному регулярному выражению /pic[1-3].jpg.
<FilesMatch "/pic[1-3].jpg">
Order deny, allow
Deny from all
</FilesMatch>
Используемые директивы внутри скобок <Directory >, <Location >, <Files >
AllowOverride All - разрешить перезаписать сходные директивы в файле .htaccess
AllowOverride None - запретить перезаписать сходные директивы в файле .htaccess
order allow, deny - задать порядок следования ниже лежащих директив (разрешить, затем запретить)
order deny, allow - задать порядок следования ниже лежащих директив (запретить, затем разрешить)
allow - задать IP-адрес или доменное имя, которому будет разрешен запрос к серверу.
deny - задать IP-адрес или доменное имя, которому будет запрещен запрос к серверу.
allow from all - разрешить всем IP-адресам или доменным именам отправлять запрос к серверу.
deny from all - запретить всем IP-адресам или доменным именам отправлять запрос к серверу.
Задать папку в которой по умолчанию будут располагаться все HTML-файлы.
DocumentRoot /opt/apache/htdocs
Задать папку в которой будут размещаться домашние страницы пользователя.
UserDir public_html
Задать дефолтные имена файлов, которые будут являться главными HTML-файлами
DirectoryIndex index.html index.htm index.cgi index.shtml (Пример http://www.site.com/ Запустит файл index.html)
AccessFileName .htaccess - эта директива задает имя файла в котором в случае его обнаружения в обычной папке можно будет наути директивы управления доступом.
Задать тип MimeType по умолчанию, если MimeType сервер не смог определить.
DefaultType text/plain
Задание связывания соотвествия URL-адреса месту расположения файлов в папке на жестком диске сервера.
Alias /icons/ /usr/local/etc/httpd/icons/ (Alias /адрес/ /папка/на/жестком/диске/с/картинками/например/)
Задание связывания соотвествия URL-адреса месту расположения сценарием на языке программирования в папке на жестком диске сервера.
ScriptAlias /cgi-bin/ /usr/local/etc/httpd/cgi-bin/ (ScriptAlias /адрес/ /папка/на/жестком/диске/с/php/кодом/например/)
Добавить ассоциацию с Mimetype
AddType
Добавление ассоциации с типом MimeType
AddType application/x-httpd-php .php
Тип MimeType По умолчанию.
DefaultType text/html
Определение требуемых характеристик железа для сервера Apache.
Определение браузера по user-agent. Вывод содержимого по для определенного браузера.
BrowseMatch Mozilla/2 nokeepalive
Адрес электронной почты администратора сервера.
ServerAdmin you@yoursite.org
Корневой каталог сервера, куда установлен Apache. Относительного этого каталога можно задавать относительные пути.
ServerRoot /opt/apache
Задание IP-адреса локального компьютера, на котором установлен Apache. Если на компьютере только один сетевой интерфейс, то эту директиву задавать не стоит, так как по умолчанию сервер прослушивает все соединения.
Чтобы Apache поддерживал только один IP-адрес задайте:
BindAddress 192.169.1.10
Чтобы Apache игнорировал все запросы исходящие не от локального компьютера задайте:
BindAddress 127.0.0.1
Для работы со всеми возможными соединениями задайте:
BindAddress *
BindAddress может быть задан только 1 раз.
При необходимости прослушивать 2 и более IP-адреса, но не все возможные, используйте директиву Listen.
Определение папки для записи файла логов об ошибках.
ErrorLog logs/error_log (относительно папки, где установлен сервер)
или
ErrorLog /var/logs/apache (абсолютный адрес)
Определение папки для записи файла логов об обменен данными сервера с внешним миром.
TransferLog logs/access_log
Задание имени сервера, которое будет отсылаться браузерам вместо имени компьютера.
ServerName www.example.com
Разрешить proxy-серверам кэшировать заголовки.
CacheNegotiatedDocs
Ограничение времени существования неактивных соединений.
Timeout 150 (секунд)
Ращрешить поддержание устойчивых соединений, которые позволяют брузеру запросить более одного блока данных одновременно. Включение этой опции полезно всем.
KeepAlive On
Установка максимального числа запросов разрешенных во время одного устойчивого соединения. Значение 0 означает Неограниченно.
MaxKeepAliveRequest 0
Задание количества секунд, на протяжении которых во время устойчивого соединения сервер будет ожидать следующего запроса.
KeepAliveTimeout 15
Установка количества одновременно подключенных к серверу браузеров.
MaxClients 150
Запус и тестирование сервера из командной строки.
apachectl configtest
apechectl start
Виртуальный хостинг.
Папка пользователя. Такой подход используется редко.
UserDir somedirectory - эта директива предназначена для того, чтобы показать, что Web-содержимое будет найдено в конкретном подкаталоге корневого каталога пользователя.
Когда работает эта директива сервер принимает запросы в виде:
http://www.example.com/~userguy
В результате файлы будут взяты из папки /home/userguy/somedirectory
Например
http://www.example.com/~timmy/x-files.html
UserDir /var/user/webspace
Файл взят из папки /var/user/webspace/timmy/x-files.html
Задание прослушивания только одногопорта.
Port 4444
Задание прослушивания одного или более IP-порта
Listen 80
Listen (пусто - значит локальный порт)
Можно использовать для задания прослушивания определенных IP-адресов
Listen 192.168.1.2:80
Listen 192.168.1.2: (все порты)
Виртуальный хостинг по имени. Самый распространеный.
Необходимо:
1. С помощью директивы NameVirtualHost определить IP-адрес, который будет использоваться для виртуального хоста.
2. С помощью пары директив VirtualHost выделить директивы, которые будут иметь отношение только к определенному виртуальному Web-узлу.
NameVirtualHost 192.168.1.1:80
Запуск виртуального хостинга.
<VirtualHost 192.168.1.1>
ServerName www.example.org (Обязательно нужно прописывать ServerName для IP-адреса)
DocumentRoot /some/other/directory (Обязательно нужно прописывать DocumentRoot, чтобы из папки брались файлы)
</VirtualHost>
или
<VirtualHost www.idiots.org> (ServerName прописывать не нужно)
DocumentRoot /some/other/directory (Обязательно нужно прописывать DocumentRoot, чтобы из папки брались файлы)
</VirtualHost>
Что можно добавить внутрь скобок <VirtualHost >
ServerName www.site2.com - доменное имя сайта
DocumentRoot /home/site2 - адрес папки с файлами для сайта
ServerAdmin admin@site2.com - почтовый адрес администратора сайта
ErrorLog /home/logs - адрсе папки для записи логов сервера для сайта
transferLog /home/trans - адрес папки для записи логов передачи данных от сервера для сайта
Директивы, которые нельзя прописывать внутри скобок виртуального хостинга
BindAddress
Listen
MaxSpareServers
MinSpareServers
MaxRequestPerChild
PidFile
ServerRoot
ServerType
TypeConfig
NameVirtualHost
Отстальное можно.
Proxy-сервер - это сервер посредник для обслуживания внешнего или внутреннего трафика при передаче запросо от компьютера к компьютеру.
Можно настроить proxy на обработку запросов поступающих на порт отличный от стандартного (80).
Listen 8888
<VirtuaHost 192.168.100.1:8888>
... директивы ...
</VirtuaHOst>
Настройка Proxy-сервера.
Для запуска proxy-сервера достаточно прописать одну директиву
Proxe-Requests On
Далее идет настройка proxy-сервера на прослушивание входящего трафика по порту 8888.
А потом для работы соэтим портом создается виртуальный хост с адресом prxoy.asgard.com
Listen 8888
<VirtualHost 192.168.100.1:8888>
ServerName proxy.asgard.com
ProxyRequests On
</VirtualHost>
Ограничение доступа к определенным сайтам.
ProxyBlock kiddiporn.com snuffulm.org (proxy-сервер не даст посмотреть эти сайты при прохождении запроса через себя)
Пересылка запросов на другие proxy-серверы.
ProxyRemote ftp http://ftpsrvr.local.com:8080 (пересылка запроса дальше)
Задание запрета на проксирование.
NoProxy .example.com (предотвратит переход запросов на удаленный proxy-сервер)
Зазеркаливание (Задание переадресации redirect) сайта.
ProxtPass /distant/mirror http://www.tuchman.edu (переадресует все локальные запросы к сайту http://www.example.edu/distant/mirror при наборе адреса http://www.tuchmnan.edu)
Задание домена по умолчанию для переводаьпроксирования на него (позволяет короче вбивать адрес)
ProxyDomain .example.com
Это позволит после введения краткого URL http://www получить доступ к сайту http://www.example.com
Управление доступом к Proxy-серверу с использоваением шаблонов для указания того, что все каталоги находятся под управлением proxy.
<Directory proxy:*>
order deny, allow
deny from список IP-адресов
allow from список IP-адресов
</Directory>
Для включения кэширования страниц необходимо задать адрес каталога в котором кэш будет располагаться и все.
CacheRoot /cache
Задание максимально рамера папки с кэшем
CacheSize 10240 (10 мегабайт)
Задание ограничения глубины вложенности создания папокпри кэшировании внутри папки CacheRoot
CacheDirLevels 3 (3 уровня вглубь папки CacheRoot)
Задание ограничения длины пути к кэш-файлам
CacheDirLength 25 (предел длины имен подкатлогов 25 символов)
Задание срока хранения кэша
CacheMaxExpire - максиму времени хранения в часах
CacheDefaultExpire - если файл поступает без срока то ставится время хранения по умолчанию
CacheLastModifiedFactor - если файл поступает без срока то вычисляется время хранения от текущего времени до времени последней модификации файла и умножается на этот коэффициент
Задание интервалов между удалениями просроченного кэше (Периодичность дуланения) в часах
CacheInterval 10.5 (10 часов 30 минут)
CacheIntervel .5 (30 минут)
Отключение директивы кэширования для файлов сайта
NoCache news www.fool.com
NoCache * (полностью отключить кэширования для всего)
Настройка формата записи логов.
LogFormat "Host=%h Date=%t BytesReturned=%b"
Отказ в подступе при попытке загрузки файлов из папки.
<Directory />
Order deny, allow
Deny from all
</Directory>
<Directory /opt/apache/htdocs>
Order deny, allow
Allow from all
</Directory>
Запретить перезапись директив в .htaccess
AllowOverrides None
Разрешить доступ к файлам.
<Directory /some/directory>
Allow from all
</Directory>
<Directory /some/directory>
order deny, allow
deny from all
allow from fenris.asgard.com
</Directory>
<Directory /some/directory>
order deny, allow
deny from all
allow from 192.168.100.0/255.255.252.0
</Directory>
Разрешить доступ только из определенного браузера.
BrowserMatch ^Mozill netscape_yes
<Directory /some/directory>
order deny, allow
deny from all
allow from env==netscape_yes
</Directory>
Задание типа бэйсик идентификации
<Directory /some/directory>
AuthName "Example of Access Control"
AuthType Basic
AuthUserFile /etc/security/.htpasswd
Require valid-user
</Directory>
зазадние страницы для авторизации
ErrorDocument 401 /site_error.html
Включение шифрования SSL
NameVirtualHost 64.22.73.226
<VirtualHost 64.82.73.226>
ServerName www.securesite.com
DocumentRoot /home/site3
SSLEngine on
SSLCertificate /var/ssl/server.crt
SSLCACertificateFile /path/to/certificate
SSLLog /var/log/ssllog
SSLLogLevel warn
</VirtualHost>
Можно еще добавить
SSLCertificetKeyFile /var/ssl/server.key
SSLCACertificatePath /some/secure/directory
SSLVerifyClient 1
SSLVerifyDepth 3
Включени инклюдов в HTML на стороне сервера.
<Location /ssdir>
Options +Include
</Location>
Включения режима исполнения скрипотв на языках программирования CGI.
<Directory /usr/local/cgi-bin>
Options +ExecCGI
</Directory>
Задания привязок URL к папкам со скриптами на языках программирования.
ScriptAlias /cgi-bin/ /usr/local/cgi-bin/
Пометить всю папку, как папку с исполняемыми скриптами.
<Directory /usr/loacl/cgi-bin>
SetHandler cgi-script
<Directory>
Определение типа файлов как исполняемые.
AddHandler cgi-script .pl .cgi
Задание MimeType файлов
AddType application/x-httpd-cgi .pl
Задание папки записи логов в cgi-скриптах
ScriptLog /var/logs/cgilog
Переадресация через mod_rewrite
Rewriteengine On - включение режима перезаписи URL
RewriteRule ^/$ /apache backup [R] - задание переадресации
RewriteCond
Интересно до стр 150
Пример файл /etc/hosts
192.168.100.1 odin.example.com
192.168.100.80 fenris.asgard.com fenris
192.168.100.10 loki.asgard.com loki
вторник, 5 февраля 2013 г.
MySQL и PHP
CREATE DATABASE mydatabase;
DROP DATABASE mydatabase;
DROP TABLE mytable
USE mydatabase;
CREATE TABLE mytable(
number INT(10),
postcode CHAR (6),
name VARCHAR(30),
surname VARCHAR(50),
cash DEC(4,2)
);
INSERT INTO mytable (number, name, surname, cash) VALUES (1, 'Dmitry', 'Ovsyannikov', 5000.00);
SELECT * FROM mytable WHERE number = 1;
SELECT name FROM mytable WHERE cash = 5000.00;
DELETE FROM table WHERE id=1;
$db = mysqli_connect(host, user, password, table) or die('Error');
mysqli_select_db($db);
$query = "INSERT INTO mytable (number) VALUES (1)";
$result = mysqli_query($db, $query) or die('Error');
while ($row = mysqli_fetch_array($result) {
$name = $row['name'];
$surname = $row['surname'];
echo($name.' '.$surname);
}
mysqli_close($db);
DROP DATABASE mydatabase;
DROP TABLE mytable
USE mydatabase;
CREATE TABLE mytable(
number INT(10),
postcode CHAR (6),
name VARCHAR(30),
surname VARCHAR(50),
cash DEC(4,2)
);
INSERT INTO mytable (number, name, surname, cash) VALUES (1, 'Dmitry', 'Ovsyannikov', 5000.00);
SELECT * FROM mytable WHERE number = 1;
SELECT name FROM mytable WHERE cash = 5000.00;
DELETE FROM table WHERE id=1;
$db = mysqli_connect(host, user, password, table) or die('Error');
mysqli_select_db($db);
$query = "INSERT INTO mytable (number) VALUES (1)";
$result = mysqli_query($db, $query) or die('Error');
while ($row = mysqli_fetch_array($result) {
$name = $row['name'];
$surname = $row['surname'];
echo($name.' '.$surname);
}
mysqli_close($db);
Подписаться на:
Комментарии (Atom)