2012-12-11 65 views
0

我通過nginx將內部網的html傳遞到Internet。我想用html文件進行一些轉換。 我用這樣的片段在我的nginx.conf通過xslt與nginx和代理解析無效的html

location /news/ { 
      proxy_pass  http://news.intranet/$request_uri; 
      proxy_set_header Host news.intranet; 
      xslt_types text/html; 
      xslt_stylesheet /var/www/www/style-news.xsl; 
    } 

但是,如果HTML是無效的,我得到了像「開幕和結束標記不匹配」在我的error.log消息。可能是其他。

我該如何控制和避免它?

回答

0

你不能。在一般情況下,HTML解析器無法解析HTML。只有當你使用格式良好的XHTML時,它纔會起作用。

0

Nginx的XSLT模塊的當前實現不支持HTML,因爲它當前使用XML解析器。也就是說,可以修補XSLT模塊以包含對HTML轉換的支持。當前穩定版本Nginx的補丁(本文發佈時爲1.4.2)可在https://github.com/jcu-eresearch/nginx-custom-build/blob/master/nginx-xslt-html-parser.patch獲得。您將需要應用此修補程序並重新編譯Nginx,確保您使用--with-http_xslt_module支持來配置您的編譯。 Nginx早期版本(大約v1.1)的原始補丁最初來自https://bitbucket.org/lrowe/nginx-xslt-html-parser

關於配置Nginx的補丁版本的說明位於 http://docs.diazo.org/en/latest/deployment.html#nginx。所以,你的情況,Nginx的配置是這樣的:

location /news/ { 
    proxy_pass   http://news.intranet/$request_uri; 
    proxy_set_header Host news.intranet; 
    xslt_stylesheet /var/www/www/style-news.xsl; 
    xslt_html_parser on; 
    xslt_types   text/html; 
} 

這使得特殊的HTML解析器,並啓用了HTML內容類型的解析器。