С нами с 29.05.09
Сообщения: 466
Рейтинг: 231
|
Добавлено: 25/11/09 в 21:03 |
Проблема: вместо означенного в конфиге nginx хоста вываливается дефолтовая страничка Apache 2 Test Page powered by CentOS. Как nginx заставить отдавать только статику, а апач результаты скриптов? Уважаемые гуру подскажите пожалуйста где я наступил на грабли?
nginx 0.7.61, apache 2.2 (php установлен как mod_php)
на апаче (2.2) висит несколько virtual hosts прописанных следующим образом:
Код: |
NameVirtualHost xxx.xxx.xxx.xxx
<VirtualHost xxx.xxx.xxx.xxx>
ServerName _default
DocumentRoot /var/empty
</VirtualHost>
<VirtualHost xxx.xxx.xxx.xxx>
...
</VirtualHost>
|
В httpd.conf прописал mod_rpaf и Listen 127.0.0.1:8080.
Конфигурация nginx (почти все честно сдерто с конфы уважаемого Pentarh, он где-то здесь её вылаживал, хочу научиться, взял его конф для примера):
Код: |
user apache;
worker_processes 1;
#worker_rlimit_nofile 16384;
error_log /var/log/nginx/nginx.err.log crit;
pid /var/run/nginx.pid;
events {
worker_connections 16384;
use epoll;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 15;
gzip on;
gzip_disable .MSIE [1-6].;
gzip_min_length 1100;
gzip_buffers 4 8k;
gzip_types text/plain text/css text/xml application/x-javascript;
server {
listen xxx.xxx.xxx.xxx:80 default deferred;
server_name myhost.com;
set $p $host;
if ($host ~ www\.(.*)) { set $p $1; }
access_log off;
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_redirect off;
proxy_set_header Host $p;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Test $remote_addr;
proxy_set_header X-Host $http_host;
proxy_set_header X-URI $uri;
proxy_set_header X-ARGS $args;
proxy_set_header Refer $http_refer;
}
location ~* \.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|js|swf|wmv|mpg|flv)$ {
root /home/username/myhost.com/html;
}
location ~ /\.ht {
deny all;
}
}
}
|
Последний раз редактировалось: megreep (26/11/09 в 09:28), всего редактировалось 1 раз
|
|
Не завидуй, но добивайся сам. Расти, когда хочется умереть.
|
0
|
|
|
С нами с 22.06.09
Сообщения: 88
Рейтинг: 233
|
Добавлено: 25/11/09 в 21:48 |
А в дире вирт. хоста какой-то index.html есть вообще?
И добавь еще кроме картинок и видео, расширения .htm .html в nginx.
|
|
|
|
С нами с 29.05.09
Сообщения: 466
Рейтинг: 231
|
Добавлено: 25/11/09 в 21:50 |
пробовал для первого виртуал хоста - там форум рабочий и index.php
вот что пишется в nginx.err.log:
Код: | 2009/11/25 19:46:17 [error] 18528#0: *3 open() "/home/username/myhost.com/html/images/smilies/icon_smile.gif" failed (2: No such file or directory), client: 93.185.177.9, server: ~^(.*)$, request: "GET /images/smilies/icon_smile.gif HTTP/1.1", host: "xxx.xxx.xxx", referrer: "http://xxx.xxx.xxx/viewtopic.php?t=4360"
2009/11/25 19:46:17 [notice] 18528#0: *5 "www\.(.*)" does not match "xxx.xxx.xxx", client: 93.185.177.9, server: ~^(.*)$, request: "GET /download/file.php?avatar=1348.gif HTTP/1.1", host: "xxx.xxx.xxx", referrer: "http://xxx.xxx.xxx/viewtopic.php?t=4360" |
еще - первый хост на котором пробовал, там myhost.com пустышка, а форум находится на forum.myhost.com (физически - папка в /html/, распознование поддоменов через rewrite правила).
может для поддоменов нужно отдельные контейнеры server {} прописывать? если так, то можно ли как-то это дело автоматизировать?
|
|
Не завидуй, но добивайся сам. Расти, когда хочется умереть.
|
0
|
|
|
С нами с 22.06.09
Сообщения: 88
Рейтинг: 233
|
Добавлено: 25/11/09 в 22:38 |
nginx не обрабатывает .htaccess, поэтому реврайты не работают.
Можно попробывать переписать их под nginx в конфиге, ну или отдельные хосты, если их там 1-2 поддомена.
А ошибки в логах - не может найти какие-то картинки, либо их там нет, либо прав у нгинкса на них нет.
|
|
|
|
С нами с 29.05.09
Сообщения: 466
Рейтинг: 231
|
Добавлено: 25/11/09 в 23:43 |
прописал каждый поддомен отдельным контейнером server {} - та же шляпа...
и вообще nginx какого-то хрена при правильном прописаном root спрашивает не там эти файлы -
Код: | 2009/11/25 22:36:13 [error] 20813#0: *53 open() "/home/username/myhost.com/html/forum/templates/subSilver/images/icon_mini_arh.gif" failed (2: No such file or directory), client: 84.51.199.178, server: forum.wce.by, request: "GET /templates/subSilver/images/icon_mini_arh.gif HTTP/1.1", host: "xxx.xxx.xxx", referrer: "http://209.85.135.132/search?q=cache:ZDmgV9MtUK8J:xxx.xxx.com/viewtopic.php%3Ft%3D10239+%D1%81%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C+FunContact+wm2003&cd=15&hl=ru&ct=clnk&client=opera" |
здесь nginx смотрит - http://forum.xxx.com/templates/subSilver/images/icon_mini_arh.gif, а надо http://forum.xxx.com/styles/prosilver/templates/subSilver/images/icon_mini_arh.gif, то есть пропускается styles/prosilver, почему?
еще иногда в логах проскакивает
Код: | client sent invalid header line: "SWF_HDR_MSG: 1" while reading client request headers |
это что такое?
|
|
Не завидуй, но добивайся сам. Расти, когда хочется умереть.
|
0
|
|
|
С нами с 29.05.09
Сообщения: 466
Рейтинг: 231
|
Добавлено: 26/11/09 в 09:24 |
гуру... ау...
|
|
Не завидуй, но добивайся сам. Расти, когда хочется умереть.
|
0
|
|
|
С нами с 01.09.09
Сообщения: 132
Рейтинг: 100
|
Добавлено: 26/11/09 в 11:22 |
Цитата: | может для поддоменов нужно отдельные контейнеры server {} прописывать? если так, то можно ли как-то это дело автоматизировать? |
Код: | server_name *.domain.com; |
Проверь конфиг апача.
Код: | NameVirtualHost 127.0.0.1:8080 |
такое есть?
Код: | <VirtualHost xxx.xxx.xxx.xxx>
ServerName _default
DocumentRoot /var/empty
</VirtualHost> |
Можно убрать
Остальные виртуалхосты:
Код: | <VirtualHost 127.0.0.1:8080>
ServerName domain.com
... |
про правила реврайта в .htaccess - как уже сказали, можно забыть.
|
|
|
|
С нами с 29.05.09
Сообщения: 466
Рейтинг: 231
|
Добавлено: 26/11/09 в 17:20 |
попробовал на локале развернуть тестовую конфигурацию apache 2.2 + nginx с таким вот конфигом:
Код: | user nginx;
worker_processes 2;
error_log /var/log/nginx/error.log debug;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] $status '
'"$request" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
server {
listen 80;
server_name _;
server_name_in_redirect off;
access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 10m;
}
}
}
|
вопрос: как определить что конкретно отдает нгинкс а что апач? как указывать нгинксу отдавать только статичные файлы а php скрипты передавать апачу? можно ли в таком случае указывать просто
Код: | location ~* \.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|js|swf|wmv|mpg|flv)$ {
root /home/username/myhost.com/html;
} |
без root .... ?
|
|
Не завидуй, но добивайся сам. Расти, когда хочется умереть.
|
0
|
|
|
С нами с 22.06.09
Сообщения: 88
Рейтинг: 233
|
Добавлено: 26/11/09 в 18:45 |
Без root откуда нгинкс будет знать где искать файлы?
А определить что отдаёт можно по логам, в access_log-е апача должны быть запросы только к скриптам.
|
|
|
|
Криптопохуист
С нами с 05.04.03
Сообщения: 17158
Рейтинг: 6019
|
Добавлено: 26/11/09 в 19:04 |
/home/username/myhost.com/html - это место вообще существует? похоже ты взял мой экзампл конфига, но ничего в нем не правил.
|
|
|
|
www.phpdevs.com
С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105
|
Добавлено: 26/11/09 в 19:51 |
|
|
Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.
|
0
|
|
|
С нами с 29.05.09
Сообщения: 466
Рейтинг: 231
|
Добавлено: 26/11/09 в 21:06 |
bb-support: уже определился по логам апача.
Pentarh: конечно существует, я что дурней паровоза пермишны и владельцы папок хостов все корректные. на локале я взял за основу конфиг с opennet.ru, там статья на эту тему была, твой я уже на продакшне разверну с поправками на мои хосты за конфиг пасиб.
получается, нужно прописывать для каждого хоста который есть в апаче, отдельный контейнер server {...} в конфиге nginx и там уже указывать конкретно для этого хоста откуда статику отдавать? сейчас вот таким образом сделал на локальной машине - работают два разных хоста, nginx отдается статику корректно из нужных папок, а апач отдает результат работы скритов.
|
|
Не завидуй, но добивайся сам. Расти, когда хочется умереть.
|
0
|
|
|