一個(gè)例子:
server {
listen 80;
server_name priv.gethnode.com;
location / {
proxy_pass http://127.0.0.1:18548;
}
}
location的匹配規(guī)則
基于最完整匹配原則
比如有幾個(gè)location
location / { }
location /images/ { }
location /blog/ { }
location /planet/ { }
location /planet/blog/ { }
http://example.com
將被/
匹配德玫,http://example.com/planet/blog/
將被/planet/blog/
匹配
參考文檔:https://www.linode.com/docs/web-servers/nginx/how-to-configure-nginx/#location-blocks
proxy_pass的理解
server的配置:
#server config
server {
listen 80;
server_name test.com;
}
如果proxy_pass只是一個(gè)host伐蒂,不是一個(gè)uri奏赘,
location /app/ {
proxy_pass http://192.168.154.102;
}
test.com/app/xxxxx => http://192.168.154.102/xxxxx
如果proxy_pass是一個(gè)uri
location /app/ {
proxy_pass http://192.168.154.102/maped_dir/;
}
test.com/app/xxxxx => http://192.168.154.102/maped_dir/xxxxx
參考文章:
https://www.liaohuqiu.net/posts/nginx-proxy-pass/
對(duì)于靜態(tài)文件
nginx一般是用www-data用戶來(lái)運(yùn)行的(不是root用戶,跟nginx版本有關(guān)系梦抢,有可能是nobody),這個(gè)配置可以從nginx.conf里查看user
所以對(duì)于的文件組應(yīng)該也是屬于www-data這個(gè)用戶組下面的
可以在根目錄下創(chuàng)建一個(gè)文件夾,授權(quán)給www-data這個(gè)目錄策彤,不要放在/root/目錄下,不然會(huì)訪問(wèn)不到報(bào)403
給文件設(shè)置用戶組以及對(duì)應(yīng)的權(quán)限:
//給文件夾以及子文件夾設(shè)置用戶和用戶組
chown -R www-data:www-data static_folder
//給文件夾和子文件夾設(shè)置權(quán)限
chmod -R 755 static_folder
//給文件設(shè)置權(quán)限
chmod g+r xxx/*
在nginx下配置對(duì)應(yīng)的staic文件夾
server {
listen 80;
server_name mapi.cxtchain.org;
access_log /var/log/nginx/mapi-access.log;
location / {
proxy_pass http://127.0.0.1:9090;
}
location /app/ {
root /;
}
}
這里第二個(gè)location就是配置的static文件的路徑匣摘,如果用root
店诗,那么路徑就會(huì)追加到路徑后面,比如:
location /app/ {
root /123/ironman/;
}
訪問(wèn)sample.com/app/xxx
=> /123/ironman/app/xxx
root可以替換為alias
這樣就直接就是alias后面的路徑
location /app/ {
alias /123/ironman/;
}
`sample.com/app/xxx` => `/123/ironman/xxx`
解決問(wèn)題的小技巧
可以通過(guò)查看nginx的error.log查看到底是文件找不到還是權(quán)限不夠
比如
2019/05/18 10:49:56 [error] 8836#0: *222 open() "/static/static/mycss.css" failed (13: Permission denied), client: 58.62.201.38, server: xxx, request: "GET /static/static/mycss.css HTTP/1.1", host: "xxx"
2019/05/18 10:49:57 [error] 8836#0: *222 open() "/static/static/mycss.css" failed (13: Permission denied), client: 58.62.201.38, server: xxx, request: "GET /static/static/mycss.css HTTP/1.1", host: "xxx"
2019/05/18 10:49:57 [error] 8836#0: *222 open() "/static/static/mycss.css" failed (13: Permission denied), client: 58.62.201.38, server: xxx, request: "GET /static/static/mycss.css HTTP/1.1", host: "xxx"
通過(guò)命令查看文件及各級(jí)父目錄的權(quán)限
[root@mock-01 nginx]# namei -l static/css/mycss.css
f: static/css/mycss.css
drw-r--r-- nginx nginx static
drwxr-xr-x nginx nginx css
-rw-r--r-- nginx nginx mycss.css
如果一直出現(xiàn) "13 permission denied"
可以嘗試這么解決
gpasswd -a www-data root
chmod g+x /root/
chmod g+x /root/.../static/
nginx -s reload
這里的www-data
指nginx的用戶名稱
第二個(gè)命令最好逐級(jí)目錄運(yùn)行下去恋沃,直到你的static文件夾
最后別忘了重新啟動(dòng)nginx
參考Stack Overflow解答
常用命令
nginx -s stop //停止
nginx -s reload //重新加載配置文件
nginx //啟動(dòng)nginx
sudo systemctl stop nginx
sudo systemctl start nginx
sudo systemctl restart nginx
sudo systemctl reload nginx