LINUX.ORG.RU

apache + nginx интересная загогулина с redirect'ами

 


0

2

Доброго времени суток уважаемые форумчане. Прошу помощи в «допиливании» конфигов apache - nginx. Суть такова: - имеется сайт под апачем http://www.example.com со следующей структурой http://www.example.com - «корень сайта» с главной страницей, на которой в таблице отображены ссылки на html файлы с оставленными коментами; http://www.example.com/comments - собственно папка, в которой сохранены все html-файлы с коментами; http://www.example.com/statistic - прочая Х.., которая на данный момент не интересует... - копия этого сайта перенесена на другой серв с nginx (структура та же); - редирект с «оригинала» на «копию» делаю следующим образом - в корне «оригинала» файлик .htaccess следующего содержания: # Options +FollowSymLinks RewriteEngine ON RewriteCond %{HTTP_HOST} ^www\.example\.com$ RewriteRule ^.*$ http://1.1.1.1:80/ [R=301] # - при попытке входа по http://www.example.com - ессно, происходит переход на http://1.1.1.1:80/ и я вижу страницу «копии» со всеми ссылками как и на оригинале. Вот теперь самое интересное - все ссылки на странице с коментариями (копия сайта) - указывают на адреса типа - http://www.example.com/comments/948twphtosfd8rju.html. И когда я пытаюсь их открыть - машина выдает 404 (что, я так понимаю, логично). Помогите пожалуйста настроить для всех страниц в папке /comments (на оригинале) редирект на их «копии». ПОЖАЛУЙСТА, буду очень признателен.

Apache'ем давно не занимался, но раз пока никто не отвечает, выдам своё предположение - заменить RewriteRule на следующий.

RewriteRule ^(.*)$ http://1.1.1.1:80$1 [R=301] 

Micky53 ()
Ответ на: комментарий от thesis

И к чему подобные высказывания? По-мере осваивания, возникают вопросы и трудности. Я никого не заставляю и не упрашиваю. Если что-то не устраивает - игнорируйте, я не обижусь да и Вам спокойнее будет. А на счет того, что «Ты так и будешь раз в неделю вылезать с одной и той же темой?» - да, вполне вероятно, что в тексте своих сообщений кое в чем повторялся или «неправильно» ставил вопрос... Ну что ж - простите, что нанес подобным Вашему эго невосполнимый ущерб...

xanderlexx ()
Ответ на: комментарий от Micky53

Создал новый файл и хлопнул его в папку с коментами - и.....

После таких действий - ссылки на «копии» начали открываться, но адресс в строке остается в таком виде http://www.example.com/comments/948twphtosfd8rju.html. Т.е. по-факту редирект не проходит, но ссылки хотя-бы открываются... (или мож я чего не разобрал?) И последняя «проблема» - новые коменты добавляются через форму и «публикуются на главной странице под управлением cgi скрипта и естественно, что он также ссылается на „оригинал“. Можно ли его действия также „перенаправлять“ на „копию“ без внесения изменений в текст самого скрипта?

xanderlexx ()
Ответ на: комментарий от Micky53

Файл следующего содержания:

Options +FollowSymLinks
RewriteEngine ON
RewriteCond %{HTTP_HOST} ^www\.example\.com/comments$
RewriteRule ^.*$ http://1.1.1.1:80/comments [R=301]

xanderlexx ()
Ответ на: комментарий от Micky53

Подкоректировал:

Options +FollowSymLinks
RewriteEngine ON
RewriteRule ^(.*)$ http://1.1.1.1:80/comments/$1 [R=301]
- теперь адресс такой - http://1.1.1.1/comments/07Y4ub0RhPF2tpYxvYTyl8BZMHE90obmако.html - и красиво Nginx сообщает, что 404 :) Самое интересное, что локейшен в конфиге Nginx прописан:
#example.com
	server {
		server_name example.com www.example.com;
                listen 10.152.147.105;
                root /home/example/public_html;
                index index.html index.htm index.php;
location /cgi-bin/ {
gzip off;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location /comments/ {
root /public_html;
index *.html;
autoindex on;
}
location /stats/ {
root /public_html;
index *.html;
		}

error_page   500 502 503 504  /50x.html;
location = /50x.html {
root   /home/example;
        }
		access_log /var/log/virtualmin/example.com_access_log;
		error_log /var/log/virtualmin/example.com_error_log;
		 fastcgi_param GATEWAY_INTERFACE CGI/1.1;
		fastcgi_param SERVER_SOFTWARE nginx;
 		fastcgi_param QUERY_STRING $query_string;
		fastcgi_param REQUEST_METHOD $request_method;
		fastcgi_param CONTENT_TYPE $content_type;
		 fastcgi_param CONTENT_LENGTH $content_length;
		fastcgi_param SCRIPT_FILENAME /home/example/cgi-bin$fastcgi_script_name;
 		fastcgi_param SCRIPT_NAME $fastcgi_script_name;
		fastcgi_param REQUEST_URI $request_uri;
		 fastcgi_param DOCUMENT_URI $document_uri;
		fastcgi_param DOCUMENT_ROOT /home/example/public_html;
		 fastcgi_param SERVER_PROTOCOL $server_protocol;
		fastcgi_param REMOTE_ADDR $remote_addr;
		 fastcgi_param REMOTE_PORT $remote_port;
		 fastcgi_param SERVER_ADDR $server_addr;
		fastcgi_param SERVER_PORT $server_port;
		 fastcgi_param SERVER_NAME $server_name;
		location ~ \.php$ {
			try_files $uri =404;
			 fastcgi_pass unix:/var/php-nginx/137999998116970.sock/socket;
		}
 		fastcgi_read_timeout 30;
		}
Вроде как конфиг нормальный - но почему 404?

xanderlexx ()
Ответ на: комментарий от xanderlexx

По всей видимости, чтоб адрес менялся в строке браузера надо использовать redirect с кодом 303. Думаю можно обойтись одним .htaccess в корне с таким содержанием.

Options +FollowSymLinks
RewriteEngine ON
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule ^(.*)$ http://1.1.1.1:80/$1 [R=303|L]

Micky53 ()
Ответ на: комментарий от Micky53

Доброго времени суток. Спасибо за подсказки. На счет правил реврайта - чуток подкоректировал - работает, все ссылки отрываются и адрес прописывается для копии. На счет:

location / {
    sub_filter 'http://www.example.com' 'http://1.1.1.1:80';
    sub_filter_last_modified on;
    sub_filter_once on;
}
- пишет ошибку - ну оно и не удивительно, т.к. нужно пересобирать сам nginx (пока этим не занимался). Вопрос остался открытым с другим моментом: - новые коменты на страницу добавляются скриптом cgi, который лежит в отдельной папке типа - http://1.1.1.1/cgi-bin/script.cgi. - при попытке создать новый комент, в строке пишется следующее - http://1.1.1.1/cgi-bin/script.cgi?want=add и в окне получаю - 403 Forbidden. - для скрипта прописываю такой-же location, как и для comments:
location /comments {
root /public_html;
index *.html;
autoindex on;
}
- /cgi-bin
location /cgi-bin {
gzip off;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Подскажите пожалуйста.

xanderlexx ()
Ответ на: комментарий от Micky53

Хм.. чем дальше, тем интереснее - поковырял чуток конфиг nginx - при попытке добавить новый комент - получаю сообщение, что новый комент добавлен, НО на главной странице «оригинала» и «копии» его нет!

xanderlexx ()
Ответ на: комментарий от xanderlexx

И так, подведем итог - долгими ковыряниями таки удалось заставить корректно работать редиректы и теперь 2 сайта отлично перенаправляются и всё открывается (кроме скрипта, который д.б. добавлять новые коменты на страницу). Спасибо всем, кто принял активное участие в решении.

xanderlexx ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.