2015-09-06 2 views
4

Недавно я перешел с HTTP-сайта на HTTPS. Чтобы индексировать все страницы этого сайта с помощью поисковой системы mnogosearch, мне нужно выполнить скрипт, включенный в mnogosearch, называемый «indexer», который фактически извлекает все страницы веб-сайта и индексирует их в таблицу MySQL.wget для HTTPS-сайта с выделенного сервера

Этот сценарий «индексатора» должен вызываться с компьютера, на котором размещен HTTP-сервер, то есть с виртуального частного сервера (VPS).

Этот скрипт очень хорошо работал с HTTP-версией моего сайта, но у меня есть проблема с индексацией HTTPS.

Действительно, чтобы иметь возможность индексировать страницы HTTPS, я использую "virtual scheme as an external retrieval system" по этой ссылке: [http://www.mnogosearch.org/doc/msearch-extended-indexing.html][1]

Это позволяет использовать внешнюю программу, чтобы получить содержание HTTPS страницы.

Он работает поставить внешнюю программу в сценарий под названием "curl.sh":

#!/bin/sh 
wget -r --no-check-certificate $1 

Проблема заключается в «wget -r --no-check-certificate https://example.com/» работает команда из моей локальной машины (он загружает все страницы моего сайта «example.com») но он не работает, когда я запускаю его непосредственно с моего VPS, где размещается мой HTTPS-сервер (например, example.com).

Во втором случае он загружает только index.html.

Вот что я получаю, когда я рекурсивный Wget на хостинговой машине:

$ wget -r --no-check-certificate https://example.com/ 
--2015-09-06 22:22:12-- https://example.com/ 
Résolution de example.com (example.com)... 
Connexion vers example.com (example.com)...connecté. 
Le propriétaire du certificat ne concorde pas avec le nom de l'hôte «example.com» 
requête HTTP transmise, en attente de la réponse...200 OK 
Longueur: 177 [text/html]a 
Sauvegarde en : «example.com/index.html» 

100%[========================================================================================================================================>] 177   --.-K/s ds 0s  

2015-09-06 22:22:12 (5,08 MB/s) - «example.com/index.html» sauvegardé [177/177] 

FINISHED --2015-09-06 22:22:12-- 
Total wall clock time: 0,5s 
Downloaded: 1 files, 177 in 0s (5,08 MB/s) 

и index.html не действует, вот его содержание:

<html><body><h1>It works!</h1> 
<p>This is the default web page for this server.</p> 
<p>The web server software is running but no content has been added, yet.</p> 
</body></html> 

я вам заметить, что мой HTTPS-сервер доступен на 8443-порту (я сделал правило перезаписи, которое перенаправляет запрос HTTPS 443 на порт 8443).

Так что я попытался также:

wget -r --no-check-certificate https://example.com:8443/ 

В этом случае Wget попытки, по-видимому, чтобы извлечь все страницы, но у меня есть 404 EROR Фро каждой странице:

$ wget -r --no-check-certificate https://example.com:8443/ 
--2015-09-06 22:39:03-- https://example.com:8443/ 
Résolution de example.com (example.com)... 
Connexion vers example.com (example.com)||:8443...connecté. 
requête HTTP transmise, en attente de la réponse...303 See Other 
Emplacement: index.html [suivant] 
--2015-09-06 22:39:04-- https://example.com:8443/index.html 
Réutilisation de la connexion existante vers example.com:8443. 
requête HTTP transmise, en attente de la réponse...200 OK 
Longueur: 7389 (7,2K) [text/html] 
Sauvegarde en : «example.com:8443/index.html» 

100%[========================================================================================================================================>] 7 389  --.-K/s ds 0s  

2015-09-06 22:39:04 (145 MB/s) - «example.com:8443/index.html» sauvegardé [7389/7389] 

Chargement de robots.txt; svp ignorer les erreurs. 
--2015-09-06 22:39:04-- https://example.com:8443/robots.txt 
Réutilisation de la connexion existante vers example.com:8443. 
requête HTTP transmise, en attente de la réponse...200 OK 
Longueur: 138 [text/plain] 
Sauvegarde en : «example.com:8443/robots.txt» 

100%[========================================================================================================================================>] 138   --.-K/s 

UPDATE: У меня есть забыл сказать, что у меня есть Twisted python server за Apache, и этот Twisted сервер прослушивает порт 8443, поэтому я сделал перенаправление с порта 443 на 8443

ответ

1

Если у вас есть доступ к серверу, самым простым решением может быть изменение конфигурации Apache, так что порт 443 переходит на тот же хост/виртуальный хост, что и на порт 8443. Затем, если вы попытаетесь загрузить https://example.com/ на сервер снова, все ваши абсолютные ссылки с использованием https://example.com/ также будут работать, и вы сможете загружать все через обычный порт.

Дальше по дороге, я думаю, вы можете сбросить флаг -r и добавить -S -O - в свою командную строку wget. Похоже, что используемое вами программное обеспечение ожидает, что заголовки и тело ответа сервера будут выведены на консоль, а не сохранены в файле.

+0

Что вы имеете в виду, изменив конфигурацию Apache, чтобы порт 443 перешел на тот же хост/virtualhost, что и порт 8443? У меня уже есть следующее правило перезаписи: RewriteRule ^/(. *) Https://example.com/$1 [R = 301, L] и следующее правило iptables: -A PREROUTING -p tcp -m tcp -dport 443 -j REDIRECT - to-ports 8443. Что я могу сделать больше? – youpilat13

+0

Прежде всего, правило iptables не помогает вам, когда вы находитесь на одном компьютере, оно применяется только к входящему трафику от других клиентов. ([источник] (http://askubuntu.com/a/595955/435294)) Таким образом, при запуске wget на вашем сервере он подключается к Apache на порту 443, пропуская правило iptables. «Настоящий» сайт настроен только для ответа на порт 8443 в настоящее время. Если вы измените директиву для обработки обоих портов 443 и 8443, это устранит проблему. Другое решение: см. Сообщение iptables, связанное выше, вы можете добавить другое правило iptables в цепочку OUTPUT, чтобы перенаправить порт локально – dncook

+0

спасибо, он работает с цепочкой OUTPUT! – youpilat13

Смежные вопросы