пятница, 22 февраля 2013 г.

Сравнение директив Apache и Nginx

Пример файла 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; (доменное имя)
    }
}

--------------------------------------------------------------------

Комментариев нет:

Отправить комментарий