Apenas observe que isso não funciona para uma configuração do Magento. Ainda estou investigando os motivos, mas acho que tem algo a ver com a string de consulta.
Jauder Ho 4/06/09
localização / wordpress deve ser útil quando você possui o wordpress no subdiretório chamado "wordpress". E quando temos o wordpress na raiz da web "/"?
rahul286
Respostas:
21
Como combinar blocos HTTP e HTTPS.
server {
listen 80;
listen 443 default ssl;
# other directives
}
Isso foi postado como resposta a uma pergunta diferente. Veja aqui .
Geralmente, usar "se" é uma má prática (de acordo com o autor do nginx). se possível, é melhor usar o try_file das diretivas error_page em vez de "if (-f ...)"
Combinando dica com o arquivo maintenence.html e dica com try_files, obtemos:
local / {
try_files /maintenance.html $ uri $ uri / @wordpress;
}
Quando a manutenção terminar, apenas mv maintenance.html de $ root.
Isso não é ideal, pois /maintenance.html será exibido como uma resposta de 200. Você provavelmente deseja que os mecanismos de pesquisa reconheçam que a página de manutenção não é o seu site real. Você provavelmente desejaria retornar um 503 (Serviço temporariamente indisponível). A única maneira de descobrir como fazer isso é com um if (-f ...) { return 503; }e error_page 503 /maintenance.html. O que você acha?
Aaron Gibralter
11
Configure o nginx para usar cifras SSL mais fortes. Por padrão, o SSLv2 está ativado (que você deve desativar, se possível).
Você pode fornecer um exemplo do mundo real para isso? Ainda não entendo completamente como é útil.
The Pixel Developer
1
@ The Pixel Developer, só é realmente útil para velocidade. O Nginx mantém os dados de um gif vazio na memória para que ele nunca precise ser carregado do disco.
Desconhecido
5
Também access_log off;para esses locais é prática comum
SaveTheRbtz
6
Nós configuramos o Nginx com o Chef, usando este livro de receitas que contém scripts para lidar com a configuração do nginx semelhante à maneira como o Debian faz o Apache2, e também alguns modelos de amostra com padrões saudáveis.
Aqui está um bom método para retornar uma página de manutenção. Todas as solicitações são reescritas e o código http correto é retornado. (503 serviço indisponível)
Na verdade, eu discordo - adicionei um comentário em serverfault.com/questions/18994/nginx-best-practices/… . Basicamente, você deseja retornar um erro 503 ou os bots e os indexadores acharão que sua página de manutenção faz parte do site atual ... Não há nada errado com uma ifdeclaração se você a usar corretamente - os documentos dizem que ifsão seguros se você estou apenas fazendo return xxx;.
Aaron Gibralter
Além disso, é location = /maintenance.html { break; }necessário?
Aaron Gibralter
4
A partir do nginx 0.7.12 e posterior, um "" é utilizável em server_name para capturar solicitações sem um cabeçalho "Host".
Você pode usar o seguinte como uma catchall para hosts virtuais indefinidos.
Seu exemplo funciona apenas para solicitações com um vhost indefinido ou também funciona com solicitações com um vhost desconhecido (errado)?
Benoit
@Benoit funciona para qualquer coisa que não esteja definida.
314 Unknown
"Server_name _ *" não é suportado no nginx 0.7 em diante?
rahul286
1
Observe que isso é apenas parcialmente verdadeiro. "" capturará um cabeçalho MISSING Host, mas não capturará uma solicitação com um cabeçalho Host que não corresponda a nada. Se você deseja um bloco de servidor abrangente, consulte o sinalizador default_server sob a diretiva listen.
Martin Fjordvald
3
Também publiquei há um tempo atrás sobre como lidar adequadamente com a compressão gzip com o nginx, pois navegadores mais antigos podem ter problemas com apenas uma declaração geral do gzip. HTH.
Não sei se é uma prática recomendada, mas definitivamente um truque interessante para obter condições aninhadas no nginx. Aqui está um exemplo do wiki nginx .
location /xxxx/ {
set $test "";
if ($request_method = POST) {
set $test P;
}
if ($http_cookie ~* "CCCC=.+(?:;|$)" ) {
set $test "${test}C";
}
if ($test = PC) {
#rewrite rule goes here.
}
}
Eu colocaria isso na categoria de "prática feia, mas ocasionalmente necessária" - certamente não é algo a ser encorajado.
Womble
2
Se você precisar alternar contextualmente entre http e https para subdomínios manipulados pelo mesmo bloco de servidor, poderá usar variáveis para fazer isso. Pode não ser a maneira mais eficiente de fazer as coisas, mas funciona:
server {
server mysite.tld ~^.+\.mysite\.tld$;
set $req_ssl = 0;
map $host $files {
default common;
mysite.tld common;
www.mysite.tld common;
admin.mysite.tld admin;
system.mysite.tld system;
*.mysite.tld users;
}
root /var/www/mysite/$files;
if ( $files = "admin" ){
set $req_ssl 1;
}
if ( $files = "common" ){
set $req_ssl 2;
}
if ( $scheme = http )
{
set $req_ssl $req_ssl.1;
}
if ( $scheme = https )
{
set $req_ssl $req_ssl.2;
}
if ($req_ssl = 1.1){
rewrite ^ https://$host$uri;
}
if ($req_ssl = 2.2){
rewrite ^ http://$host$uri;
}
}
Eu sempre tento usar a rootdiretiva na parte superior do bloco do servidor para tirar proveito da $document_rootvariável e nunca, mas nunca, incluir a rootdiretiva dentro de um bloco de localização.
A página Pitfalls do wiki Nginx tem ótimas dicas sobre práticas recomendadas.
Se você estiver usando o nginx como proxy, ajustar as configurações de tempo limite pode ser importante para garantir que você não tenha conexões de queda do nginx antes que seu aplicativo seja concluído, especialmente se você estiver lidando com um aplicativo de alto tráfego:
Respostas:
Como combinar blocos HTTP e HTTPS.
Isso foi postado como resposta a uma pergunta diferente. Veja aqui .
fonte
De longe, as melhores dicas que eu já vi são do autor em sua página de armadilhas: https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
fonte
Geralmente, usar "se" é uma má prática (de acordo com o autor do nginx). se possível, é melhor usar o try_file das diretivas error_page em vez de "if (-f ...)"
Combinando dica com o arquivo maintenence.html e dica com try_files, obtemos:
Quando a manutenção terminar, apenas mv maintenance.html de $ root.
fonte
if (-f ...) { return 503; }
eerror_page 503 /maintenance.html
. O que você acha?Configure o nginx para usar cifras SSL mais fortes. Por padrão, o SSLv2 está ativado (que você deve desativar, se possível).
http://tumblelog.jauderho.com/post/121851623/nginx-and-stronger-ssl
fonte
Geralmente é mais eficiente usar a
map
diretiva no lugar de expressões regulares ao alternar a raiz para subdomínios correspondentes:fonte
O
empty_gif
módulo também é muito útil, especialmente se você precisar monitorar as respostas do servidor da web (usando nagios / monit / etc):fonte
access_log off;
para esses locais é prática comumNós configuramos o Nginx com o Chef, usando este livro de receitas que contém scripts para lidar com a configuração do nginx semelhante à maneira como o Debian faz o Apache2, e também alguns modelos de amostra com padrões saudáveis.
fonte
Aqui está um bom método para retornar uma página de manutenção. Todas as solicitações são reescritas e o código http correto é retornado. (503 serviço indisponível)
fonte
if
declaração se você a usar corretamente - os documentos dizem queif
são seguros se você estou apenas fazendoreturn xxx;
.location = /maintenance.html { break; }
necessário?A partir do nginx 0.7.12 e posterior, um "" é utilizável em server_name para capturar solicitações sem um cabeçalho "Host".
Você pode usar o seguinte como uma catchall para hosts virtuais indefinidos.
fonte
Também publiquei há um tempo atrás sobre como lidar adequadamente com a compressão gzip com o nginx, pois navegadores mais antigos podem ter problemas com apenas uma declaração geral do gzip. HTH.
http://tumblelog.jauderho.com/post/27655495/gzip-compression-with-nginx
fonte
Não sei se é uma prática recomendada, mas definitivamente um truque interessante para obter condições aninhadas no nginx. Aqui está um exemplo do wiki nginx .
fonte
Se você precisar alternar contextualmente entre http e https para subdomínios manipulados pelo mesmo bloco de servidor, poderá usar variáveis para fazer isso. Pode não ser a maneira mais eficiente de fazer as coisas, mas funciona:
fonte
Eu sempre tento usar a
root
diretiva na parte superior do bloco do servidor para tirar proveito da$document_root
variável e nunca, mas nunca, incluir aroot
diretiva dentro de um bloco de localização.A página Pitfalls do wiki Nginx tem ótimas dicas sobre práticas recomendadas.
fonte
Se você estiver usando o nginx como proxy, ajustar as configurações de tempo limite pode ser importante para garantir que você não tenha conexões de queda do nginx antes que seu aplicativo seja concluído, especialmente se você estiver lidando com um aplicativo de alto tráfego:
fonte
Você deu uma olhada aqui?
http://www.directadmin.com/forum/showthread.php?p=137288
fonte