• nginx配置与常见错误解决方法


    1、下载:
    到官网下载nginx稳定版,解压到e盘根目录;
    到官网下载php非安装版,解压到e盘根目录。

    2、配置:
    打开nginx.conf,修改相关位置如下,
    location / {
                root   html; #网站根目录
                index  index.html index.htm index.php;
                autoindex on;  #当网站没有默认文件时,打开域名可以看到文件目录结构
            }
    location ~ \.php$ {
                #root           html;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  e:/html/$fastcgi_script_name; #php文件存放目录,测试过相对路径不行,需要绝对路径
                include        fastcgi_params;
            }

    配置好后打开命令提示符,切换到e:\nginx,启动nginx命令:start nginx 。(相关介绍可到http://nginx.org/en/docs/windows.html
    注意:当修改配置文件后,要nginx -s quit 然后 start nginx 才有配置后的效果,用 nginx -s reload 没效果。可能是windows版本的一个bug吧。

    配置php.ini,设置extension_die = "ext/",把相关用到的ext扩展dll前面的分号去掉,不然不能正常启动php-cgi.ext。
    启动php-cgi.exe;切换到e:\php,在命令提示符下输入php-cgi.exe -b 127.0.0.1:9000。

    3、测试:
    写一个打印phpinfo()的php脚本放到html目录下面,测试php程序是否能够运行。经过测试成功运行。

    ========================================================
    启动与停止
    1. 启动Nginx:
    D:/nginx-1.0.4/nginx.exe -p D:/nginx-1.0.4
    2. 启动PHP-CGI
    D:/php/php-cgi.exe -b 127.0.0.1:9001 -c D:/php/php.ini
    为了方便可以写到一个批处理文件中,这里用到了一个RunHiddenConsole,可以在这里下载:
    @echo off
    REM Windows 下无效
    REM set PHP_FCGI_CHILDREN=5
     
    REM 每个进程处理的最大请求数,或设置为 Windows 环境变量
    set PHP_FCGI_MAX_REQUESTS=1000
    echo Starting PHP FastCGI...
    REM RunHiddenConsole C:/php5/php-cgi.exe -b 127.0.0.1:9000 -c C:/php5/php.ini
    D:/nginx-1.0.4/RunHiddenConsole.exe D:/php/php-cgi.exe -b 127.0.0.1:9001 -c D:/php/php.ini
     
    echo Starting nginx...
    D:/nginx-1.0.4/RunHiddenConsole.exe D:/nginx-1.0.4/nginx.exe -p D:/nginx-1.0.4
    exit
    3. 停止Nginx
    D:/nginx-1.0.4/nginx.exe -p D:\nginx-1.0.4 -s stop
    4. 停止PHP-CGI
    taskkill /F /IM php-cgi.exe > nul
    同样可以写到一个批处理文件中:
    @echo off
    echo Stopping nginx...
    REM taskkill /F /IM nginx.exe > nul
    D:/nginx-1.0.4/nginx.exe -p D:\nginx-1.0.4 -s stop
     
    echo Stopping PHP FastCGI...
    taskkill /F /IM php-cgi.exe > nul
    Nginx配置的路径问题
    由于在Windows下文件路径可以用”\”, 也可以用”\\”, 也可以用”/”作为路径做分隔符。但”\”最容易引发问题,所以要尽量避免使用。
    例如下面的配置可以正常运行
    root   G:\ezdemo;
    但是这样
    root G:\tweb;
    就会出现问题,访问程序时会出现500错误。
    在logs/error.log里面会发现这类似这样的错误日志:
    2011/06/16 22:07:28 [crit] 4756#5412: *2 GetFileAttributesEx() "G:  web" failed (123: The filename, directory name, or volume label syntax is incorrect), client: 127.0.0.1, server: php.lab, request: "GET / HTTP/1.1", host: "php.lab"
    2011/06/16 22:13:38 [crit] 4756#5412: *5 CreateFile() "G:   pweb/test.html" failed (123: The filename, directory name, or volume label syntax is incorrect), client: 127.0.0.1, server: php.lab, request: "GET /test.html HTTP/1.1", host: "php.lab"
    注意到G:后而有一个tab空格,你应该明白怎么回事了:)
    ========================================================
    关于nginx以服务方式运行原理和实现方法参见 http://bbs3.chinaunix.net/thread-1264548-1-1.html
    另在那个帖子中还有一个完整的所用工具和脚步的zip包,照readme.txt 安装好服务是没有问题的

    本文主要是说说 nginx-0.7.58 以服务方式运行后“nginx -s reload”常见错误解决方法
    注意,这个 nginx-0.7.58 下载自官方http://nginx.net

    1、[alert]: CreateFileMapping(1024, nginx_shared_zone) failed (5: Access is denied)
    根据这个提示我分析了一下,应该是权限问题,这时我分别用服务启动和命令启动nginx后发现
    服务启动后 nginx 是以 system 身份运行的,而 命令启动后 nginx 是以 administrator 身份运行的
    这样看问题应该是出在了服务的运行身份上,所以我们应该修改服务的运行身份,具体修改方法:
    服务--》NGNIX--》属性--》登陆--》登陆身份--》选择此账户后账户填入administration,再填入密码
    修改完后重启服务再试 nginx -s reload ,一切正常

    2、[error]: OpenEvent("ngx_reload_31796") failed (2: The system cannot find the file specified)
    这个应该是最常见的错误了,一般引起这个错误的主要原因是 nginx 不能处理特定pid的 nginx 进程而造成的
    这个错误信息中 reload 还有可能是 stop reopen quit,而后面的31796则是当前 logs\nginx.pid 中的值
    我碰到这个问题的时候是在我mstsc登陆vps上的win03时,下面是当时复制出的一些信息


    D:\httpd\nginx>sc stop nginx
    D:\httpd\nginx>sc start nginx
    D:\httpd\nginx>tasklist | findstr nginx
    nginx.exe                    16360 Console                    0      3,184 K
    nginx.exe                    31112 Console                    0      3,512 K
    D:\httpd\nginx>start nginx.exe
    D:\httpd\nginx>tasklist | findstr nginx
    nginx.exe                    16360 Console                    0      3,184 K
    nginx.exe                    31112 Console                    0      3,512 K
    nginx.exe                    32696 RDP-Tcp#3                  7      3,212 K
    nginx.exe                    14988 RDP-Tcp#3                  7      3,524 K
    D:\httpd\nginx>

    当时我没有发现有啥问题,以为是程序的问题,后来我在本地虚拟机上win03上使用没有碰到此错误,一样的操作为啥结果会不同?
    我就又重新在vps上的win03上做试验,发现了猫腻,服务启动和远程登陆后手动启动的会话id不同
    就拿上面抓的信息为例子
    nginx以服务方式启动的会话id是0,而我远程登陆后的会话id是7,所以不能操作会话id 0启动的nginx
    而我远程登陆后自己手动 start nginx 启动,这时nginx.exe的会话id就是我现在用的,所以我此时是能正常使用 nginx -s reload 的

    综上所述,这个错误是由于不能正常结束特定进程所引起的,也大多数情况是在远程登陆后操作才会出现,具体的解决方法未知,最关键的问题远程登陆后如何切换到会话id 0上去

  • 相关阅读:
    SpringCloud采用Dubbo远程调用(SpringCloud Alibaba)
    服务注册与发现Nacos
    Nacos配置管理
    Spring Cloud Stream
    MySQL查询优化explain
    索引
    MySQL架构
    mysql事务、视图
    多表查询
    分布式为什么使用python
  • 原文地址:https://www.cnblogs.com/lechie/p/2383258.html
Copyright © 2020-2023  润新知