Eu passei muito tempo tentando fazer o hgwebdir trabalhar com o nginx e é um pouco difícil, porque o hgwebdir não envia a solicitação para o navegador para autenticação. No final resolvi assim:
server {
listen 80;
listen 10240;
server_name code.zofrex.com;
access_log /home/zofrex/websites/code.zofrex.com/logs/access.log;
error_log /home/zofrex/websites/code.zofrex.com/logs/errors.log;
location / {
limit_except GET {
proxy_pass http://localhost:81;
}
fastcgi_pass 127.0.0.1:10001;
include fastcgi_params;
}
location ~ ^/(HGBot|ZeroBotAHD|zoebot|FZeroZBot|RDPrototype|RSPS3000|zerobot|rmi) {
proxy_pass http://localhost:81;
}
include defaults;
}
server {
listen 81;
access_log /home/zofrex/websites/code.zofrex.com/logs/access_secure.log;
error_log /home/zofrex/websites/code.zofrex.com/logs/errors_secure.log;
location / {
auth_basic "Restricted";
auth_basic_user_file /home/zofrex/passwords;
fastcgi_pass 127.0.0.1:10001;
include fastcgi_params;
}
include defaults;
}
Esta é a única maneira que você pode fazer isso, na verdade, já que limit_except não pode ser combinado com fastcgi_pass - na verdade, nenhuma condicional pode, mas eles são combinados com proxy_pass. Não faço ideia do porquê.
Então, como isso funciona? Se uma solicitação GET chegar, ela será enviada para o hgwebdir imediatamente. Se um POST (ou seja, um push) entrar, o pedido se desloca para o proxy na porta 81, o que sempre solicita a autenticação básica, garantindo assim que isso aconteça.
Por que o local com o enorme regex? Esses são projetos protegidos que eu quero exigir autenticação para acesso de leitura.
Por que ouvir na porta 10240? Não me lembro porque está lá.
Ah, e estou usando o wsgi com o spawn-fcgi, e é por isso que ele é fastcgi_pass. Esta configuração exata provavelmente não será a certa para você, mas esperamos que o mesmo truque resolva suas dificuldades de empurrar.