Условия в Apache - PullRequest
       13

Условия в Apache

1 голос
/ 14 июня 2011

У меня KOHANA_ENV переменная окружения установлена ​​на DEVELOPMENT, например. Теперь есть набор правил, которые я хотел бы применить, только если для этой переменной установлено значение PRODUCTION (включить mod_deflate, установить значения по умолчанию для заголовков expires, отключить ETags и т. Д.), Например:

if (KOHANA_ENV == PRODUCTION) {
    // .. do stuff
}

Есть ли способ сделать это на уровне Apache или лучше иметь два файла conf?

1 Ответ

1 голос
/ 14 июня 2011

Я делаю это с помощью замечательного модуля mod_macro .

Допустим, у вас есть /etc/apache2/envvars (для дистрибутива, подобного Debian, это место для хранения переменных окружения apache):

#export KOHANA_ENV=PROD
export KOHANA_ENV=DEV

Где вы [un] комментируете в зависимости от производства или разработки.

С другой стороны у вас есть VirtualHost или только его часть, определенная с помощью макроса.Макрос - это способ написать общую часть конфигурации с некоторыми переменными.Я использую его для полных виртуальных хостов, но вот пример с частью VirtualHost.Мы будем использовать переменную environmentnement, чтобы решить, какой макрос использовать (ключевое слово Use ):

<Virtualhost *:80>
    ServerName foobar.com
    #(...)
    Use EnvStuff_${KOHANA_ENV} /tmp
    #(...)

Здесь макрос принимает аргумент (путь к каталогу tmp), который не является обязательным.

Тогда вам нужно только определить 2 разных макроса, где переменная окружения является частью имени макроса EnvStuff_PROD & EnvStuff_DEV :

<Macro EnvStuff_PROD $tmp>
    <IfModule mod_expires.c>
        # Enable expirations.
        ExpiresActive On
        # Cache all files for 2 weeks after access (A).
        ExpiresDefault A1209600
    </IfModule>
    <IfModule mod_headers.c>
       Header set MyHeader "Hello this is PRODUCTION envirronment. It took %D microseconds for Apache to serve this request."
        # Serve gzip compressed CSS files if they exist and the client accepts gzip.
        RewriteCond %{HTTP:Accept-encoding} gzip
        RewriteCond %{REQUEST_FILENAME}\.gz -s
        RewriteRule ^(.*)\.css $1\.css\.gz [QSA]
        #(...)
    </IfModule>
    php_admin_value upload_tmp_dir $tmp/upload
    #(... other php settings for production)
</Macro>
<Macro EnvStuff_DEV $tmp>
    <IfModule mod_expires.c>
        # Enable expirations.
        ExpiresActive Off
    </IfModule>
    <IfModule mod_headers.c>
       Header set MyHeader "Hello this is DEVELOPMENT envirronment. It took %D microseconds for Apache to serve this request."
    </IfModule>
    php_admin_value upload_tmp_dir $tmp/upload
</Macro>

В этихНапример, вы можете проверить заголовки в ответах и ​​легко увидеть, работает ли он для вас.

Будьте осторожны, если переменная окружения настроена неправильно, у вас возникнут некоторые проблемы, возможно, вы сможете создать макрос EnvStuff_ , а также: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...