nginx配置相关

2019-02-24  本文已影响0人  ironman_

一个例子:

server {
    listen 80;
    server_name priv.gethnode.com;
    location / {
        proxy_pass http://127.0.0.1:18548;
    }
}

location的匹配规则

基于最完整匹配原则
比如有几个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只是一个host,不是一个uri,

location /app/ {
    proxy_pass      http://192.168.154.102;
}

test.com/app/xxxxx =>  http://192.168.154.102/xxxxx

如果proxy_pass是一个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/

对于静态文件

nginx一般是用www-data用户来运行的(不是root用户,跟nginx版本有关系,有可能是nobody),这个配置可以从nginx.conf里查看user

所以对于的文件组应该也是属于www-data这个用户组下面的

可以在根目录下创建一个文件夹,授权给www-data这个目录,不要放在/root/目录下,不然会访问不到报403

给文件设置用户组以及对应的权限:

//给文件夹以及子文件夹设置用户和用户组
chown -R www-data:www-data static_folder
//给文件夹和子文件夹设置权限
chmod -R 755 static_folder
//给文件设置权限
chmod g+r xxx/*

在nginx下配置对应的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 /;
    }
}

这里第二个location就是配置的static文件的路径,如果用root,那么路径就会追加到路径后面,比如:

location /app/ {
        root /123/ironman/;
    }

访问sample.com/app/xxx => /123/ironman/app/xxx

root可以替换为alias这样就直接就是alias后面的路径

location /app/ {
        alias /123/ironman/;
    }

`sample.com/app/xxx` => `/123/ironman/xxx`

解决问题的小技巧

可以通过查看nginx的error.log查看到底是文件找不到还是权限不够
比如

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"

通过命令查看文件及各级父目录的权限

[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

如果一直出现 "13 permission denied"

可以尝试这么解决

gpasswd -a www-data root

chmod g+x /root/
chmod g+x /root/.../static/

nginx -s reload

这里的www-data指nginx的用户名称
第二个命令最好逐级目录运行下去,直到你的static文件夹
最后别忘了重新启动nginx
参考Stack Overflow解答

常用命令

nginx -s stop //停止
nginx -s reload  //重新加载配置文件
nginx  //启动nginx

sudo systemctl stop nginx
sudo systemctl start nginx
sudo systemctl restart nginx
sudo systemctl reload nginx
上一篇下一篇

猜你喜欢

热点阅读