Voici mes fichiers de configuration nginx.
Sur le default.conf, le premier emplacement est utilisé pour accéder au répertoire/usr/share/nginx/html, il est ok tant que j'accède à http://47.91.152.99 . Mais lorsque j'ajoute un nouvel emplacement au répertoire/usr/share/nginx/public, nginx me renvoie une page 404 pendant que j'accède à http://47.91.152.99/test .
Alors, quel est le problème? Est-ce que je abuse de la directive de nginx?
/etc/nginx/nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
/etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/log/Host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location ^~ /test/ {
root /usr/share/nginx/public;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
Le bloc erroné suivant (dans votre cas);
location ^~ /test/ {
root /usr/share/nginx/public;
index index.html index.htm;
}
indique à nginx de rechercher le répertoire 'test' dans le dossier (racine)/usr/share/nginx/public. S'il n'y a pas de dossier 'test' dans cette racine, il retournera 404. Pour répondre à votre problème, je vous suggère d'essayer d'utiliser alias au lieu de root . Ainsi:
location ^~ /test/ {
alias /usr/share/nginx/public;
index index.html index.htm;
}
En outre, la directive index peut être définie de manière générale pour que vous n'ayez pas à la réécrire tout le temps ... comme ça;
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html index.htm;
error_page 500 502 503 504 /50x.html;
location / { }
location ~^/test/ {
alias /usr/share/nginx/public;
}
location = /50x.html {
root /usr/share/nginx/html;
}
}
Une chose que vous devriez également considérer: plus le bloc d’emplacement est «précis», plus il doit résider dans votre configuration. Comme ça location = /50x.html
. Dans un monde parfait, cela serait configuré en haut, juste après les paramètres de blocage généraux du serveur.
J'espère que ça aide.
location ^~ /test/ {
root /usr/share/nginx/public;
index index.html index.htm;
}
location ^~ /test/ {
alias /usr/share/nginx/public;
index index.html index.htm;
}
Conseil supplémentaire: la directive index peut être définie de sorte que vous n’ayez pas à la réécrire.
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html index.htm;
error_page 500 502 503 504 /50x.html;
location / { }
location ~^/test/ {
alias /usr/share/nginx/public;
}
location = /50x.html {
root /usr/share/nginx/html;
}
}
nginx correspond aux blocs d’emplacement en partie basés sur la position dans la configuration. Idéalement, vous inverseriez ce que vous avez maintenant. Le bloc d'emplacement serait plus élevé dans nginx config. À cette fin, l'emplacement = /50x.html serait également déplacé vers le haut. L'ordre est
En savoir plus sur nginx location location . En outre, vous pouvez toujours consulter la documentation officielle. La documentation nginx relative au bloc location http://nginx.org/en/docs/http/ngx_http_core_module.html#location