Архив метки: apache

Nginx как front-end к apache (апач через прокси nginx) FreeBsd

На одном из серверов пробую ускорить сайт на drupal + модуль Commerce. Mysql уже потюнил. Memcached установлен. Закешировано почти всё что можно. Но! тормозит.. Как жест отчаянья, попробую еще и через nginx пустить статику. Вдруг хоть чуток но полегчает..

1. В httpd.conf меням порт Listen с 80 на 8080. Тоже самое меняем в вирутальных хостах <VirtualHost *:8080>

2. Ставим nginx, ставим в автостарт

pkg install nginx
sysrc nginx_enable=yes

3. Правим файл конфигурации nginx (/usr/local/etc/nginx/nginx.conf)

server {
        listen       80;
        server_name  www.domen.ru;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
#вот это динамика, пусть её занимается апач
        location / {
	    proxy_pass http://domen:8080;
	    proxy_set_header Host $host;
	    proxy_set_header X-Real-IP $remote_addr;
	    proxy_set_header X-Forwarded-For $remote_addr;
	    proxy_connect_timeout 120;
	    proxy_send_timeout 120;
	    proxy_read_timeout 180;
        }
# Вот это считаем статикой
        location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js|html|txt)$ {
	    root /usr/local/www/apache24/sites/centrtricolor;
	}
...
/usr/local/etc/rc.d/apache2 restart
/usr/local/etc/rc.d/ngnix restart

SSL сертификат Let’s Encrypt во FreeBSD 10.x + Apache24

1) Ставим официальный клиент из портов

cd /usr/ports/security/py-certbot/
make install clean

2) Получаем SSL сертификат

certbot certonly --agree-tos --email ferfe@mail.ru --webroot -w //usr/local/www/apache24/ssl/mail/ -d mail.domen.ru

Сертификаты будут автоматически помещены в

/usr/local/etc/letsencrypt/live/mail.domen.ru

3) Настраиваем Apache

Настройка сводится к изменению строчек в httpd-ssl.conf . Предполагается, что самоподписанный сертификат корневой, у вас уже установлен и сгенерирован.

SSLCertificateFile "/usr/local/etc/letsencrypt/live/mail.domen.ru/cert.pem"
SSLCertificateKeyFile "/usr/local/etc/letsencrypt/live/mail.domen.ru/privkey.pem"
&nbsp;

 

4) В крон помещаем строчку на выполнение раз в месяц:

certbot certonly&nbsp; -renew --agree-tos --email ferfe@mail.ru --webroot -w //usr/local/www/apache24/ssl/mail/ -d mail.domen.ru

Совместное использование php 7 и php 5 на одном сервере Ubuntu 16.4

По умолчанию на последних версиях Ubuntu с ситемой ставится php 7. Однако до сих пор множество проектов не работают полноценно на этой версии.

1) Добавим репозитарий и установим php 5.6 и php 7.0 вместе

sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php7.0 php5.6 php5.6-mysql php-gettext php5.6-mbstring php-mbstring php7.0-mbstring php-xdebug libapache2-mod-php5.6 libapache2-mod-php7.0

2) Переключимся на php 5.6

  • Apache:
    sudo a2dismod php7.0 ; sudo a2enmod php5.6 ; sudo service apache2 restart
    
  • CLI:
    sudo update-alternatives --set php /usr/bin/php5.6
    

3) Переключимся на php 7.0

  • Apache:
    sudo a2dismod php5.6 ; sudo a2enmod php7.0 ; sudo service apache2 restart
    
  • CLI:
    sudo update-alternatives --set php /usr/bin/php7.0
    

wss WebSocket через proxy apache

Возникла необходимость поднять соединение wss Websocket из браузера на странице с протоколом https. Причем сертификат для страницы — самоподписанный. Соответственно при первом заходе на такую страницу, браузер сообщает что страница не небезопасна и т.п. Когда пользователь соглашается, что согласен посетить данную страницу, открывается сайт, и скрипт на сайте пытается установить wss соединение с сервером по тому-же адресу, что и сам сайт. И соответственно не получается, т.к. пользователь страницы не одобрил это не безопасное соединение. Если он откроет в браузере ссылку вида https://websocketserver:8100, и согласится, то соединение будет установлено корректно. Но заставлять пользователя перед работой на сайте открывать еще одну страницу — бред. Можно поступить по другому: не заметно перенаправить соединение вида https://websocketserver/wss/ на ws://websocketserver:8100 . И вуаля — соединение теперь устанавливается без лишних вопросов.
Для того чтобы это всё работало, в настройках апача нужно включить модули: proxy_module и proxy_wstunnel_module. И в настройках сайта соответственно прописать чтото типа:

ProxyPass /chat/ ws://noc.dcedwedwe.ru:8100/
ProxyPassReverse /chat/ ws://noc.dcedwedwe.ru:8100/

Автоматическое создание поддомена в apache

Задача: избавиться от необходимости руками прописывать каждый домен в настройках Apache.

Решение: настроим apache так, чтобы он автоматически подхватывал доменное имя, и отдавал страницу из соотвествующей доменному имени папки:

1. Вкючаем модуль vhost_alias

2. Настраиваем основной кинфиг apache подобным образом образом:

<VirtualHost *:80>
 ServerAdmin pкуцаукауb@mail.ru
DocumentRoot /var/www/html
 VirtualDocumentRoot /var/www/html/%0

 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
ServerName zxc.ru
ServerAlias *.zxc.ru
</VirtualHost>

 

3. Одно НО! Настроенный таким образом апач будет искать www.zxc.ru и zxc.ru в разных папках. Для устранения: в папке www.zxc.ru создадим .htaccess, который будет переадресовывать на zxc.ru:

Redirect 301 / http://ymt-net.ru/