需要在 xx 网下面做一个网页真实性认证,说要把一个 xxx.txt 文件放在网站根目录下(需要能够用 "域名/xxx.txt"访问)。 第一反应就是扔在在/public 下,然后放完了发觉连不上。。。 到网上逛了一圈,最后通过改 config.serve_static_assets = true 勉强连上了。 但是我总觉得哪里不太对。。。(不是说 nginx 会自己把 config.serve_static_assets 设成 false 的么?既然是 nginx 的话应该在 nginx.conf 里面写点什么对吧~)
我是 nginx+unicorn 的环境,求牛人指导正确的做法
config.serve_static_assets
这个只是开启 rails 自身 server 处理静态文件的能力,一般来说静态文件都会交给 nginx 或 apache 等一些 http server 处理,这样做的好处是提高性能,让 rails server 只处理动态请求,不必浪费资源处理静态文件请求。在则 rails server 处理静态文件的性能完全不能和 nginx,apache 之类的比。
location ~* /.*\.(png|jpg|ico|css|js) {
expires max;
root /home/user/apps/current/public;
}
@mojidong 谢谢解释。不过我用你的你代码仍然是报 403 错误(我的 root 已经在 location 外面指定过了,还有什么要注意的呢?)
user www-data; worker_processes 4; pid /var/run/nginx.pid;
events { worker_connections 768; # multi_accept on; }
http {
upstream xxx_release_server { server unix:/tmp/xxx_release.sock fail_timeout=0; } upstream xxx_server { server unix:/tmp/xxx.sock fail_timeout=0; }
server { listen 80; charset utf-8; server_name xxx.com;
root /root/xxx_production/current/public; location ~* ^/(images|javascripts|stylesheets|img)/ { access_log off; log_not_found off; expires max; break; } }
location / { proxy_set_header Host $host; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forward-For $proxy_add_x_forwarded_for; proxy_buffering on; proxy_redirect off;
if (!-f $request_filename) { proxy_pass http://xxx_release_server; break; } }
} ## # Basic Settings ##
sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; # server_tokens off;
# server_names_hash_bucket_size 64; # server_name_in_redirect off;
include /etc/nginx/mime.types; default_type application/octet-stream;
## # Logging Settings ##
access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log;
## # Gzip Settings ##
gzip on; gzip_disable "msie6";
include /etc/nginx/conf.d/.conf; include /etc/nginx/sites-enabled/; }
@mojidong "GET /xxx.txt HTTP/1.1" 403 199 "-" 后面是 user-agent 貌似没有特别有用的信息。 另外,我发觉 favicon.ico 可以访问,但是 xxx.txt 和 422.html 都不能直接访问。 xxx.txt 的权限很高了,755 了已经
@mojidong 呃,favicon.ico 其实也不能访问,刚才可能哪里错觉了吧。信息少了点,然后我这里也略有点乱。我还是自己先看看吧。多谢帮忙~
@zlx_star 恩,我后来重新看了一下 log,确实看到 permission denied 了,但是我也尝试过把整个项目目录到文件整个设成 777 了,仍然不能访问...等回头有空了我再好好整理一下。
@zqalyc 我的问题还没完全解决,只是靠 config.serve_static_assets 勉强混过这一段而已。我这边加了文件和目录权限仍然不行,你也许可以试试,理论上来说 755 就够了。(唉,我也是小白。。。)
先从 nginx 上开始找吧,nginx 默认应该能够提供静态文件的服务。把 rails 先停掉,直接请求静态资源,看看 access.log 的信息。