Apache HTTP Sunucusundaki tüm HTTP yöntemlerini etkinleştirme


16

Apache web sunucusunda RFC 2616'da tanımlanan tüm HTTP yöntemlerinin işlenmesini nasıl etkinleştirebilirim? Bunlar:

OPTIONS
GET
HEAD
POST
PUT
DELETE
TRACE
CONNECT

Apache HTTP Sunucusu, sürüm 2.2.22 (Ubuntu) kullanıyorum
İşte benim .htaccessDosya:

<Location /output>
        Dav On
    <LimitExcept GET HEAD OPTIONS PUT>
        Allow from all
    </LimitExcept>
</Location>

İşte Telnet çalıştırmaktan aldığım çıktı - PUT yöntemi yok:

Escape character is '^]'.
OPTIONS / HTTP/1.0

HTTP/1.1 200 OK
Date: Tue, 09 Oct 2012 06:56:42 GMT
Server: Apache/2.2.22 (Ubuntu)
Allow: GET,HEAD,POST,OPTIONS
Vary: Accept-Encoding
Content-Length: 0
Connection: close
Content-Type: text/html

Connection closed by foreign host.

Bunun hakkında bir fikrin var mı?


hangi apache sürümünü kullanıyorsunuz?

Sunucu sürümü: Apache / 2.2.22 (Ubuntu)

1
Üzerinde yöntemleri sınırlayıcı ediyoruz /outputkonumu, ancak için soruyorsun OPTIONSüzerinde /konumu. Yöntem sınırları üst konumlar için değil, yalnızca daha derin konumlar için geçerlidir.
lanzz

Yanıtlar:


7

Apache, statik içerik için tüm ilgili HTTP yöntemlerini uygular (doğrudan Apache tarafından sunulan gerçek dosyalar). Dinamik içerik (CGI komut dosyaları, mod_phpvb.) İçin Apache HTTP yönteminin ne olduğunu umursamaz (açıkça bir <Limit>yönerge ile kısıtlanmadığı sürece ) ve isteği olduğu gibi uygun işleyiciye iletir. Komut dosyanızın Apache yerine özel yöntemi kullanması gerekir. Standart olmayan yöntemler bile dinamik işleyicilere sorunsuz bir şekilde aktarılır.

ASDFG / HTTP/1.1Bir mod_phpkomut dosyası tarafından işlenen geçersiz bir istekle test edildi . Alınan Apache'den Hiçbir şikayet, ASDFGiçinde $_SERVER['REQUEST_METHOD']işleyici komut.


Cevabınız için teşekkürler. Bazı http yöntemlerine izin vermek için .htaccess dosyamı düzenledim. Telnet üzerinden OPTIONS / HTTP / 1.0 ile kontrol ettim. İzin verilen http yöntemleri hiçbir zaman değişmedi. Bu sorun apache ile ilgili olmayabilir, ancak tüm http yöntemini etkinleştirmek benim için hala bir sorun.

Muhtemelen tam olarak ne denediğinizi, hangi yanıtı görmeyi beklediğinizi, bunun yerine ne gördüğünüzü ve bu istekleri sunucu tarafında nasıl ele aldığınızı göndermelisiniz. Bir erişimi veya benzer bir erişim denetimini OPTIONSaçıkça yasaklamadığınız sürece hiçbir şey isteği durdurmamalıdır <Limit OPTIONS> deny from all </Limit>.
lanzz

2

http://httpd.apache.org/docs/current/mod/core.html adresine dayanarak , bu yöntemler directoryve .htaccessyapılandırma dosyalarında Limit method [method] ... > ... </Limit>yönerge kullanılarak değiştirilebilir

Temel olarak , yöntemleri engellemek için kullanılanlar gibi seçenekleri yorumlamanız gerekir .

<Limit POST PUT DELETE>
  Require valid-user
</Limit>


1

Bunu düzeltmenin kesin yolu, Apache'nin durumunuzdaki istekleri neden reddettiğini öğrenmektir . Bunu hata günlüklerinden öğrenebilirsiniz.

Benim durumumda tail -f /usr/local/apache/logs/error_logbunu verdi:

[Sun Sep 18 08:39:52.570672 2016] [:error] [pid 32076:tid 140086307448576] 
[client 93.125.93.77] ModSecurity: Access denied with code 501 (phase 2). 
Match of "rx ^((?:(?:POS|GE)T|OPTIONS|HEAD))$" against "REQUEST_METHOD" 
required. [file "/usr/local/apache/conf/modsec-imh/01_base_rules.conf"] [line 
"32"] [id "960032"] [msg "Method is not allowed by policy"] [severity 
"CRITICAL"] [tag "POLICY/METHOD_NOT_ALLOWED"] [hostname "104.244.122.237"] 
[uri "/products/order/items/45"] [unique_id "V96LGGj0eu0AAH1MR8sAAACB"]

Bir güvenlik kuralı bahseder ve dosya o geliyor: /usr/local/apache/conf/modsec-imh/01_base_rules.conf. Bu dosyayı düzenlemek sorunumu çözdü.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.