LNMP环境搭建-nginx

nginx安装在没有其他需求或者问题发现以前是很简单的,configure && make && make install,下面是配置和使用

首先php-fpm是可以启动的,启动成功后,应该可以使用命令netstat -an |grep 9000看到端口监听,启动时如果提示你缺少一个配置文件,这个配置文件php的etc下有默认的文件,重命名或者拷贝即可。

接下来我就像启动nginx呀,在此多说一句,由于/usr/local/**/sbin这些自定义的安装目录没有添加到path,所以启动的时候总是得带路径,这个可以在 ~/.bash_profile的PATH参数中引入这些目录,大家应该都知道的了。

PATH=$PATH:$HOME/bin:/usr/local/php5.6/sbin:/usr/local/nginx/sbin

默认的配置文件nginx.conf是可以启动的,但估计是不能直接访问的,起码针对php来说。这个配置我也觉得比较麻烦,我也是一步一步坎坷的走的。

首先是得匹配php-fpm,这一段默认是注释掉的,先打开注释

        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi_params;
        }

然后网站肯定有一个目录,参考别人的配置,在server下添加一个root,调试肯定需要看日志的,也添上,这个目录需要你提前建好。

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;
        root /var/local/www/;
        index index.php;
        access_log  /var/local/log/host.access.log;
        error_log  /var/local/log/host.error.log;

重新启动nginx,命令  nginx -s stop && nginx,不建议使用nginx -s reload。

此时,访问localhost,你可能看到了网页,但是不是你自己的phpinfo信息,而是两个超链接 “直播,点播”,这是因为下面的location内容:

        location / {
            root   html;
            index  index.html index.htm;
        }

此时,网站目录被指定到了nginx安装目录的html下,默认访问的就是index.html,你可以到/usr/local/nginx/html下面去看这个文件。修改方法就是去掉这个root,或者把上层的root移到这个地方替换,我也不知道哪种方法好。

在我们一个项目中,location是这么配置的,好复杂:

        location / { 
            if (!-e $request_filename) {
               rewrite ^/v1.1/Public/(.*)$ /v2.x/Public/index.php/$1 last;
               rewrite  ^/(.*)/$  /index.php/$1/index.html  last;
               rewrite  ^/(.*)$  /index.php/$1  last;
               break;
            }   
        }

我暂时使用简单的location调试,此时访问默认的80端口提示的是 :“403 Forbidden”几个大字,明显是权限的问题了。此时也可以看日志文件了,日志的提示是这样的

[error] 13981#0: *1 directory index of "/var/local/www/" is forbidden, client: 192.168.80.28, server: localhost, request: "GET / HTTP/1.1", host: "192.168.80.201"

这个目录没有访问权限,我不想全部用root用户来操作业务网站,所以我修改了nginx和php-fpm的配置文件,让启动用户和组都是我的个人用户zht

nginx的用户设置在nginx.conf最开始的地方

#user nobody;
user  zht;

php-fpm的在php安装目录的etc下, php-fpm.conf,查找user即可找到

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = zht
group = zht

修改完成后,重启,用ps -ef可以查看nginx和php-fpm的操作用户:

zht      14476 13656  0 13:26 pts/4    00:00:00 grep --color=auto ngixn
[zht@localhost conf]$ ps -ef |grep nginx
root     13980     1  0 13:23 ?        00:00:00 nginx: master process nginx
zht      13981 13980  0 13:23 ?        00:00:00 nginx: worker process
zht      14478 13656  0 13:26 pts/4    00:00:00 grep --color=auto nginx
[zht@localhost conf]$ ps -ef |grep php-fpm
root      8271     1  0 11:40 ?        00:00:00 php-fpm: master process (/usr/local/php5.6/etc/php-fpm.conf)
zht       8272  8271  0 11:40 ?        00:00:00 php-fpm: pool www
zht       8273  8271  0 11:40 ?        00:00:00 php-fpm: pool www
zht      14480 13656  0 13:26 pts/4    00:00:00 grep --color=auto php-fpm

可以看到,他们的maser都是root,就是由root启动的,但是worker都是zht,但问题是我已经把/var/local/下的www目录赋予zht用户了,为什么还提示forbidden呢。

经过我不短的一段时间的排查,排查后又经过测试,引起上述问题的直接原因是location /下的index没有放置index.php。简单而完整的配置如下:

    server {
        listen       80;
        server_name  localhost;

        root /var/local/www/;
        index index.php;
        access_log  /var/local/log/www.access.log;
        error_log  /var/local/log/www.error.log;

         location / {
             index index.php index.html index.htm;   
         }
         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;
         }

    }

将location下的root删除,在server层下添加网站目录,index添加index.php,fastcgi_param里边的/script修改为$document_root/。

location /下的index如果不带有index.php,会提示forbidden,根本原因我暂时不明确,还希望高手告知呀,但这个地方是需要注意的。

另外你可能会遇到如下错误

 *1 FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 192.168.80.28, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "192.168.80.201"

"Primary script unknown"一般就是fastcgi找不到文件了,基本就是那个SCRIPT_FILENAME的/script没有修改为你的网站目录,即变量$document_root。

另附上我们一个项目中的location相关配置

         location / {
                 if (!-e $request_filename) {
                         rewrite ^/v1.1/Public/(.*)$ /v2.x/Public/index.php/$1 last;
                         rewrite  ^/(.*)/$  /index.php/$1/index.html  last;
                         rewrite  ^/(.*)$  /index.php/$1  last;
                         break;
                 }

         }
         location ~ \.php {
             fastcgi_pass 127.0.0.1:9000;
             fastcgi_index index.php;
             include fastcgi.conf;

             set $real_script_name $fastcgi_script_name;

             if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
                 set $real_script_name $1;
                 set $path_info $2;
             }

             fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
             fastcgi_param SCRIPT_NAME $real_script_name;
             fastcgi_param PATH_INFO $path_info;
         }

         location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
             expires      30d;
         }

         location ~ .*\.(js|css)?$ {
             expires      1h;
         }


你可能感兴趣的:(nginx,配置)