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


скрип автозапуска 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