Установка apache и nginx в связке на FreeBSD

Установка apache и nginx в связке на FreeBSD

Для начала нам потребуется установить некоторые компоненты, подробную установку можно найти:
Установка apache и nginx в связке на FreeBSD и как это работает?
Что необходимо сделать:
+ поставить Nginx в связке с апачем.
+ сделать чтоб Nginx отдавал статику(картинки), а остальные запросы проксировал апачу.
Немного теории, что и как работает, покажу наглядный пример на картинке
nginx+apache
Некий человек вводит HTTP запрос на ваш сайт, после чего начинает обработку nginx который «висит на 80-м порте», если это статические данные (картинки или видео, музыка), то он отдает энжинксом, а если нет, тогда обработку ведет beckend (apache) который  «висит на 8080 порте».Если мы используем сервер апач в связке с энжинкс в качестве бэкэнда, то он не будет получать реальные IP-адреса пользователей, посетивших ресурс. Это не позволит корректно вести логи работы сервера. Чтобы решить задачу нужно установить модуль для Apache — mod_rpaf (что является аббревиатурой от reverse proxy add forward). Модуль RPAF используется для того чтобы в логах apache регистрировались адреса
клиентов, вместо адреса шлюза nginx:

# fetch https://tarball-repo.googlecode.com/files/mod_rpaf-0.6.tar.gz
Распакуем архив, командой:

# tar zxvf mod_rpaf-0.6.tar.gz
Переходим в данную папку и добавляем библиотеку:

# cd mod_rpaf-0.6
# /usr/local/apache2/bin/apxs  -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c

Если Вы используете фапач 2.4 как я, то это НЕ  БУДЕТ РАБОТАТЬ, выдаст что то типа этого:

mod_rpaf
Погуглив эту ошибку в интернете, я нашел решениеНужно подправить пару параметров в файлах: 
mod_rpaf.c
mod_rpaf-2.0.c
У которых нужно заменить параметр с remote_ip на client_ip и remote_addr на client_addr, после чего все заработало
Осталось подключить модуль в httpd.conf (У меня он подключился сам. СМОТРИТЕ ВНИМАТЕЛЬНО!!!):
# ee /usr/local/apache2/conf/httpd.conf
LoadModulerpaf_module modules/mod_rpaf-2.0.so
Нужно еще в этом файле изменить еще кое что:
[...]
NameVirtualHost *:80
[...]
Listen 80
[...]
ServerName 192.168.77.136:80
[...]
Меняем:
[...]
#NameVirtualHost *:8080
[...]
Listen 127.0.0.1:8080
[...]
ServerName 127.0.0.1:8080
[...]
Осталось подправить nginx.conf:
# ee /usr/local/nginx/conf/nginx.conf
server {
#Установка apache и nginx в связке на FreeBSD
 listen 192.168.77.136:80; # ip вашего сервера и порт
 server_name example.com www.example.com; # Имя вашего домена с www и без
 location / {
 proxy_pass http://127.0.0.1:8080/;
 proxy_set_header Host $host;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarder_for;
 }
 location ~* \.(jpeg|jpg|gif|png|css|js|pdf|txt|tar)$ { # Обрабатываемые типы файлов
 root /home/captain/www/; # Путь к корневому каталогу вашего сайта
 }
}
ВСЕ!!! Установка apache и nginx в связке на FreeBSD окончена! Осталось только перезапустить сервисы:
APACHE.
# /usr/local/apache2/bin/apachectl start
Смотрим что нормально apache стартанул:
# ps aux | grep httpd
NGINX.
Это если вы используете скрипт:
# /usr/local/etc/rc.d/nginx.sh restart
Смотрим что энжинкс нормально работает и стартанул:
# ps aux | grep nginx
Выложу мои конечные конфиги, может кому то и пригодится.
httpd.conf
ServerRoot "/usr/local/apache2"
Listen 127.0.0.1:8080
#Listen 80
LoadModule authn_file_module modules/mod_authn_file.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
#LoadModule authn_dbd_module modules/mod_authn_dbd.so
#LoadModule authn_socache_module modules/mod_authn_socache.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
#LoadModule authz_dbm_module modules/mod_authz_dbm.so
#LoadModule authz_owner_module modules/mod_authz_owner.so
#LoadModule authz_dbd_module modules/mod_authz_dbd.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule auth_basic_module modules/mod_auth_basic.so
#LoadModule auth_form_module modules/mod_auth_form.so
#LoadModule auth_digest_module modules/mod_auth_digest.so
#LoadModule allowmethods_module modules/mod_allowmethods.so
#LoadModule file_cache_module modules/mod_file_cache.so
#LoadModule cache_module modules/mod_cache.so
#LoadModule cache_disk_module modules/mod_cache_disk.so
#LoadModule cache_socache_module modules/mod_cache_socache.so
#LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
#LoadModule socache_dbm_module modules/mod_socache_dbm.so
#LoadModule socache_memcache_module modules/mod_socache_memcache.so
#LoadModule macro_module modules/mod_macro.so
#LoadModule dbd_module modules/mod_dbd.so
#LoadModule dumpio_module modules/mod_dumpio.so
#LoadModule buffer_module modules/mod_buffer.so
#LoadModule ratelimit_module modules/mod_ratelimit.so
LoadModule reqtimeout_module modules/mod_reqtimeout.so
#LoadModule ext_filter_module modules/mod_ext_filter.so
#LoadModule request_module modules/mod_request.so
#LoadModule include_module modules/mod_include.so
LoadModule filter_module modules/mod_filter.so
#LoadModule substitute_module modules/mod_substitute.so
#LoadModule sed_module modules/mod_sed.so
#LoadModule deflate_module modules/mod_deflate.so
LoadModule mime_module modules/mod_mime.so
LoadModule log_config_module modules/mod_log_config.so
#LoadModule log_debug_module modules/mod_log_debug.so
#LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
#LoadModule mime_magic_module modules/mod_mime_magic.so
#LoadModule expires_module modules/mod_expires.so
LoadModule headers_module modules/mod_headers.so
#LoadModule usertrack_module modules/mod_usertrack.so
#LoadModule unique_id_module modules/mod_unique_id.so
#Установка apache и nginx в связке на FreeBSD
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule version_module modules/mod_version.so
#LoadModule remoteip_module modules/mod_remoteip.so
#LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
#LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
#LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_express_module modules/mod_proxy_express.so
#LoadModule session_module modules/mod_session.so
#LoadModule session_cookie_module modules/mod_session_cookie.so
#LoadModule session_crypto_module modules/mod_session_crypto.so
#LoadModule session_dbd_module modules/mod_session_dbd.so
#LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
#LoadModule ssl_module modules/mod_ssl.so
#LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
#LoadModule lbmethod_bytraffic_module modules/mod_lbmethod_bytraffic.so
#LoadModule lbmethod_bybusyness_module modules/mod_lbmethod_bybusyness.so
#LoadModule lbmethod_heartbeat_module modules/mod_lbmethod_heartbeat.so
LoadModule unixd_module modules/mod_unixd.so
#LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
#LoadModule info_module modules/mod_info.so
#LoadModule cgi_module modules/mod_cgi.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule vhost_alias_module modules/mod_vhost_alias.so
#LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
#LoadModule actions_module modules/mod_actions.so
#LoadModule speling_module modules/mod_speling.so
#LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
#<Directory />
#Options FollowSymLinks
#AllowOverride None
#SetEnvIf GEOIP_COUNTRY_CODE UA Blocked
#Order allow,deny
#Allow from all
#<Files "*.php">
#Deny from env=Blocked
#</Files>
#</Directory>

LoadModule rewrite_module modules/mod_rewrite.so
LoadModule php5_module        modules/libphp5.so
LoadModule geoip_module       modules/mod_geoip.so
LoadModule rpaf_module        modules/mod_rpaf-2.0.so
<IfModule unixd_module>
User daemon
Group daemon
</IfModule>

ServerAdmin nvs@8.to
ServerName 127.0.0.1:8080
<Directory />

  # Options FollowSymLinks
  # AllowOverride None
  # SetEnvIf GEOIP_COUNTRY_CODE UA Blocked
  # Order allow,deny
  # Allow from all
  # <Files "*.php">
  # Deny from env=Blocked
  # </Files>
   
    AllowOverride none
    Require all denied
</Directory>
DocumentRoot "/home/captain/www/"
<Directory "/home/captain/www">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
    #Options FollowSymLinks
    #AllowOverride None
    #SetEnvIf GEOIP_COUNTRY_CODE CN Blocked
    #Order allow,deny
    #Allow from all
    #<Files "*.php">
    #Deny from env=Blocked
    #</Files>
</Directory>
<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>
<Files ".ht*">
    Require all denied
</Files>
ErrorLog "logs/error_log"
LogLevel warn
<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    <IfModule logio_module>
      # You need to enable mod_logio.c to use %I and %O
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
    CustomLog "logs/access_log" common
    #CustomLog "logs/access_log" combined
</IfModule>
<IfModule alias_module>
    ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
</IfModule>
<IfModule cgid_module
    #Scriptsock cgisock
</IfModule>
<Directory "/usr/local/apache2/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>
<IfModule mime_module>
     TypesConfigconf/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    AddType application/x-httpd-php .php .htm .html 
    AddType application/x-httpd-php-source .phps
    #AddHandler cgi-script .cgi
    # For type maps (negotiated resources):
    #AddHandler type-map var
    #AddType text/html .shtml
    #AddOutputFilter INCLUDES .shtml
</IfModule>
# Configure mod_proxy_html to understand HTML4/XHTML1
<IfModule proxy_html_module>
Include conf/extra/proxy-html.conf
</IfModule>
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
nginx.conf
#user  nobody;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    #access_log  logs/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;
 server {
        listen       80;
        server_name  192.168.77.136; #localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
        location / {
            root   html;
            index  index.html index.htm;
        }
        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
 #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #Установка apache и nginx в связке на FreeBSD
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
    # another virtual host using mix of IP-, name-, and port-based configuration
server {
    listen 192.168.77.136:80;
    server_name 192.168.77.136;
    root /usr/home/captain/www;
    location / {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_redirect off;
}
location ~* ^.+\.(jpg|gif|ico|css|js|png|flv|wmv|mpg)$ {
      root /usr/home/captain/www;
       }
  }
    # HTTPS server
    #
    #server {
    #    listen       443;
    #    server_name  localhost;
#    ssl                  on;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_timeout  5m;

    #    ssl_protocols  SSLv2 SSLv3 TLSv1;
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers   on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}
Спасибо что прочитали «Установка apache и nginx в связке на FreeBSD», надеюсь Вам понравилось как я написал  и разместив ее на http://linux-notes.org.

3 thoughts on “Установка apache и nginx в связке на FreeBSD

  1. скрип автозапуска nginx не работает
    Starting nginx: /usr/local/etc/rc.d/nginx.sh: line 27: start-stop-daemon: command not found

    • Выполните:
      # ls -al /usr/local/etc/rc.d/nginx.sh

      И посмотрите находится ли он по такому пути, так же, права на исполнение и от кого запускается ( если что правим):
      # ls -al /usr/local/etc/rc.d/nginx.sh
      # chmod 755 /usr/local/etc/rc.d/nginx.sh
      # chown your_user:your_group /usr/local/etc/rc.d/nginx.sh

      Предоставьте пожалуйста лог-файл с подробной ошибкой. Так же, укажите версию Вашей FreeBSD. Тогда я смогу Вам помочь.

      PS: если все копировали как у меня, то должно отлично все работать.

      • Сразу хочу сказать огромное спасибо за труды по freebsd на этом сайте. Очень помогли.
        Возникла ошибка в скрипте
        /usr/local/nginx/logs]# /usr/local/etc/rc.d/nginx.sh restart
        Restarting nginx: /usr/local/etc/rc.d/nginx.sh: line 37: start-stop-daemon: command not found

        Ровно та же ошибка что и у astronom.
        вот после 2х сек. пользования гуглом:
        http://serverfault.com/questions/370004/start-stop-daemon-freebsd

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.