Установка 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