ここに私のnginx設定ファイルがあります。
Default.confでは、最初の場所が/ usr/share/nginx/htmlディレクトリへのアクセスに使用されます。 http://47.91.152.99 にアクセスしている間は問題ありません。しかし、ディレクトリ/ usr/share/nginx/publicディレクトリの新しい場所を追加すると、nginxは http://47.91.152.99/test にアクセスしているときに404ページを返します。
それで、問題は何ですか?私は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;
}
}
次の誤ったブロック(あなたの場合);
location ^~ /test/ {
root /usr/share/nginx/public;
index index.html index.htm;
}
フォルダー(ルート)/ usr/share/nginx/public内でディレクトリ 'test'を探すようにnginxに指示しています。そのルートに「テスト」フォルダーがない場合、404を返します。問題に対処するために、rootの代わりにaliasを使用することをお勧めします。そのようです:
location ^~ /test/ {
alias /usr/share/nginx/public;
index index.html index.htm;
}
また、キックの場合のみ、インデックスディレクティブを一般的に設定できるため、常に書き換える必要はありません。
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;
}
}
また、考慮すべき点の1つは、ロケーションブロックが「正確」であるほど、構成の上位に配置する必要があることです。そのようなlocation = /50x.html
。完璧な世界では、一般的なサーバーブロック設定の直後に、それがトップに設定されます。
それが役に立てば幸い。
location ^~ /test/ {
root /usr/share/nginx/public;
index index.html index.htm;
}
location ^~ /test/ {
alias /usr/share/nginx/public;
index index.html index.htm;
}
追加のヒント:indexディレクティブは、書き換える必要がないように設定できます。
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は、構成内の位置に部分的に基づいてロケーションブロックを照合します。理想的には、あなたが今持っているものを反転させるでしょう。ロケーションブロックは、nginx configで高くなります。そのため、location = /50x.htmlも上に移動します。ご注文は
nginx location priority の詳細。また、公式ドキュメントをいつでも確認できます。ロケーションブロックのnginxドキュメント http://nginx.org/en/docs/http/ngx_http_core_module.html#location