我正在尝试在服务器上进行magento安装。这是我的Vhost文件。
server {
listen 80;
## SSL directives might go here
server_name development.magento.in ; ## Domain is here twice so server_name_in_redirect will favour the www
root /var/www/devcode/;
client_max_body_size 2M;
location / {
index index.html index.php; ## Allow a static html file to be shown first
try_files $uri $uri/ @handler; ## If missing pass the URI to Magento's front handler
expires 365d; ## Assume all files are cachable
}
if ($request_uri = /index.php) {
rewrite ^ http://$host? permanent;
}
location /app/ { deny all; }
location /includes/ { deny all; }
location /lib/ { deny all; }
location /media/downloadable/ { deny all; }
location /pkginfo/ { deny all; }
location /report/config.xml { deny all; }
location /shell/ { deny all; }
location /downloader/ { deny all; }
location /cron.php { deny all; }
location ~ .php/ { ## Forward paths like /js/index.php/x.js to relevant handler
rewrite ^(.*.php)/ $1 last;
}
location /. { ## Disable .htaccess and other hidden files
return 404;
}
location @handler { ## Magento uses a common front handler
rewrite / /index.php;
}
# serve static files directly
location ~* ^.+\.(jpg|jpeg|gif|css|png|js|ico|html|txt)$ {
# root /var/www/devcode/skin/; # I tried to added to this also but never worked
access_log off;
expires 30d;
}
location ~ \.php$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_read_timeout 300;
}
}
因此,通过此配置,Nginx显示 403用于Css和js以及图像。有趣的是,如果我删除了提供静态文件的部分,则会显示 404 。 我已经尝试过Stackoverflow上的所有帖子。 这是我的媒体和皮肤目录权限的样子
drwxr-xr-x. 23 nginx nginx 4096 Mar 22 14:32 media
drwxr-xr-x. 5 nginx nginx 4096 Mar 13 03:45 skin
任何帮助或提示都会受到高度尊重!
修改
我的新配置文件就是这样:
server {
listen 80;
## SSL directives might go here
server_name development.magento.in ; ## Domain is here twice so server_name_in_redirect will favour the www
root /var/www/devcode/;
index index.html index.php; ## Allow a static html file to be shown first
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
access_log /var/log/nginx/development.access.log ;
error_log /var/log/nginx/development.error.log ;
client_max_body_size 2M;
location / {
try_files $uri $uri/ /index.php?$args; #@handler; ## If missing pass the URI to Magento's front handler
expires 365d; ## Assume all files are cachable
}
if ($request_uri = /index.php) {
rewrite ^ http://$host? permanent;
}
location ^~ /(app|includes|lib|media/downloadable|pkginfo|var)/ { internal; }
location /var/export/ { internal; }
location ~ .php/ { ## Forward paths like /js/index.php/x.js to relevant handler
rewrite ^(.*.php)/ $1 last;
}
location /. { ## Disable .htaccess and other hidden files
return 404;
}
# serve static files directly
location ~* ^.+\.(jpg|jpeg|gif|css|png|js|ico|html|txt)$ {
access_log off;
expires 30d;
}
location ~ \.php$
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param MAGE_RUN_CODE default;
fastcgi_param MAGE_RUN_TYPE store;
fastcgi_read_timeout 300;
}
}
现在我的上一期是固定的。但现在我无法让我的网站运行。我已经检查了access.log,它说HTTP 200 OK
但是index.php没有收到任何请求。
答案 0 :(得分:2)
您可以简单地将alias指令用于静态文件:
location /skin {
alias /var/www/devcode/skin;
access_log off;
expires 30d;
}
或更明确地
location /skin/ {
alias /var/www/devcode/skin/;
access_log off;
expires 30d;
}
(见两端的正斜线差异......)
嗯,你实际上也可以用root指令来做,但最后一个正斜杠太多了。查看alias
和root
here之间的区别。我仍然建议使用alias
代替root
,因为它有明显的理由来提供静态并且仅在location
级别上受支持。
无论我的回答如何,我都会说这个配置看起来像是来自apache重写逻辑而不是整体上优化得很好的nginx风格。您可能希望将上面显示的静态内容分隔到不同的子文件夹中。那么你也可能想知道为什么If is Evil。您可以try files:
而不是在@handler
中重写
location @handler { ## Magento uses a common front handler
try_files $uri $uri/ /index.php?$args;
}
我无法为deny all
提出更明智的想法。但是,我会将public
文件夹中的php和静态内容分开并将其定义为root
,将这些deny
放在首位。请注意,如果这些建议与您的特定需求相冲突,其中一些建议可能听起来毫无意义。