Em um servidor para uma pequena equipe de pessoas (até 30), instalei vários serviços que devem ser acessados pelo navegador. Quero usar o nginx porque considero ser mais leve.
Todos os serviços/aplicativos são testados de forma independente e fazem seu trabalho. Mas quando se trata de colocá-los todos juntos divididos por subpastas (por exemplo, teamserver.local/service1 ou teamserver.local/service2), luto muito quando se trata de reescrever regras e passagem de proxy.
Eu simplesmente não consigo configurar as subpastas para funcionar.
Aqui está minha configuração padrão:
server {
listen 80;
server_name teamserver.local;
rewrite ^ https://$http_host$request_uri? permanent; # redirect to https!
}
server {
listen 443;
server_name teamserver.local;
root /var/www;
ssl on;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
ssl_session_timeout 5m;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
ssl_prefer_server_ciphers on;
location /service1 {
fastcgi_pass 127.0.0.1:8000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param HTTPS on;
fastcgi_param HTTP_SCHEME https;
access_log /var/log/nginx/seahub.access.log;
error_log /var/log/nginx/seahub.error.log;
}
location /seafhttp {
rewrite ^/seafhttp(.*)$ $1 break;
proxy_pass http://127.0.0.1:8082;
client_max_body_size 0;
proxy_connect_timeout 36000s;
proxy_read_timeout 36000s;
}
location /media {
rewrite ^/media(.*)$ /media$1 break;
root /home/seafile/seafile/seafile-server-latest/seahub;
}
location ~ ^/openproject(/.*|$) {
alias /home/openproject/openproject/public$1;
access_log /var/log/nginx/openproject/openproject.access.log;
error_log /var/log/nginx/openproject/openproject.error.log;
passenger_ruby /home/openproject/.rvm/gems/ruby-2.1.4/wrappers/ruby;
passenger_base_uri /openproject;
passenger_app_root /home/openproject/openproject;
passenger_document_root /home/openproject/openproject/public;
passenger_user openproject;
passenger_enabled on;
}
location /ldap {
rewrite ^/ldap(.*)$ /$1 break;
root /usr/share/phpldapadmin/htdocs;
index index.php index.html index.htm;
# With php5-fpm:
#fastcgi_pass unix:/var/run/php5-fpm.sock;
#fastcgi_index index.php;
#include fastcgi_params;
}
location /musik {
rewrite /musik(.*) /$1 break;
proxy_pass http://127.0.0.1:6680;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
}
}
Tenho certeza de que há algo errado em definir a diretiva raiz correta e/ou talvez a ordem na qual o nginx analisa os locais. Eu simplesmente não entendo direito.
Aqui é quase certo que o nginx está procurando a diretiva root. As perguntas são: POR QUÊ?!
Eu sou muito novo no nginx e não quero manter o confuso "cada serviço tem sua porta. Basta usar isso!" mentalidade.
Como sempre, ficaria feliz se alguém apontasse o dedo para os problemas. Ler o manual do nginx e a referência do módulo não me ajudou muito, embora eu já tenha descoberto alguns erros e os corrigido. Portanto, qualquer ajuda é bem-vinda.
Use
alias
em vez deroot
. Por exemploalias /path/to/ldap
.O problema com a
root
diretiva é que o caminho após alocation
diretiva é anexado ao final doroot
caminho da diretiva.Por exemplo, no seu caso:
significa que o nginx procura o URL
http://server/ldap/index.html
no/usr/share/phpldapadmin/htdocs/ldap/index.html
local.Com
alias /usr/share/phpldapadmin/htdocs;
, o nginx procura o mesmo URL no/usr/share/phpldapadmin/htdocs/index.html
local.