nginx 在win7的安装与运行
本来想在windows7上安装Nginx,然后部署thinkphp的,过程中遇到了一些小问题,所以都记录下来!供以后查阅!几个细节的东西,有必要写清楚!
上下载地址:/en/download.html
就那最新的版本做实验吧。我下了 windows原生版本 1.3.5,整个文件就是一个zip压缩文件。下载到F盘的根目录下,解压缩。出来的文件夹是nginx-1.3.5,顺便改成了nginx,方便使用(其实改不改都没有关系,改了,是因为重启nginx的时候,少打点字母罢了)。然后冲动的进入文件夹,双击启动文件,弹出了一个doc窗口,就在眨眼的功夫里,消失了,没有看清提示什么内容;不管三七二十一,我在浏览器了,打开127.0.0.1,提示 无法显示页面。我们没有安装IIS7,如果是无法显示页面,说明nginx启动失败了。但是到底是什么原因让nginx无法启动呢?
我想个办法,放doc的提示显示出来,结果提示是:
[emerg]:bind() to 0.0.0.0:80 failed <10013: An attempt was made to access a socket in a wa
y forbidden by its access permissions>
看提示信息,是因为windows 80 端口被占用了,所以又想办法把80端口释放了。开始运行–cmd 进入命令提示符 输入netstat -ano 即可看到所有连接的PID 之后在任务管理器中到这个nginx部署前端项目PID所对应的程序如果任务管理器中没有PID这一项,可以在任务管理器中选查看”-”选择列
经常,我们在启动应用的时候发现系统需要的端口被别的程序占用,如何知道谁占有了我们需要的端口,很多人都比较头疼,下面就介绍一种非常简单的方法,希望对大家有用。
我们需要确定谁占用了我们的80端口
windows命令行窗口下执行:

C:>netstat -aon|findstr “80″
TCP 0.0.0.0:19780 0.0.0.0:0 LISTENING 2044
TCP 10.72.224.5:2558 96.17.109.8:80 ESTABLISHED 2044
TCP 10.72.224.5:2757 60.210.176.209:80 TIME_WAIT 0
TCP 10.72.224.5:3956 125.46.1.234:80 ESTABLISHED 2044
TCP 10.72.224.5:3959 125.46.1.234:80 ESTABLISHED 2044
UDP 0.0.0.0:2280 *:* 3700
看到了吗,端口被进程号为2044的进程占用,继续执行下面命令:

C:>tasklist|findstr “2044″
2044 Console 0 37,680 K
很清楚吧,360浏览器占用80端口,赶紧关闭。当然,如果你的80端口被其他程序占用,kill掉或者调整端口。
然后双击来启动nginx,这回没有提示信息了,打开浏览器 127.0.0.1:80;呵呵,nginx终于正常运行。
为什么要nginx运行在80端口上呢?因为本人想让nginx作为代理服务和前端服务。域名指向到服务器的ip的时候,直接就到nginx。所以周折了一番。
在配置php环境的时候,有遇到了问题。我明明修改了f的参数了,在重新启动的时候,都是无效的,很是郁闷,所以php环境配置无法配置成功了。仔细检查了配置文件的语法错误,发现了一些错误,修改过来了,仍然无效,干脆恢复原来的配置文件,还是老样子,这么一来就奇怪了。压根重启是无效的。
官方的文档很清楚:
nginx -s stop    quick exit
nginx -s quit    graceful quit
nginx -s reload    changing configuration, starting a new worker, quitting an old worker gracefully
nginx -s reopen    reopening log files
就这么几行命令,执行后,一切都正常,就是没有效果。
最后想到办法,打开windows的任务管理器,把nginx的几个进程都关闭了,启动nginx,终于看到想要的效果了。
但是最终配的是thinkphp,需支持RewritePath_info,在网上了一下,有两种办法
第一种,最简单的方法:
加上一句
location ~ \.php {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/company$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
第二种方法:(注意:nginx 0.5 版此方法无效)
location ~ \.php
{
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
set $path_info "";
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 /var/html/$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
include /etc/nginx/fastcgi_params;
}
我用的是第一种。
最后配置的代码为:
worker_processes  1;
events {
    worker_connections  10240;
}
http {
    include      pes;
  default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen      8000;
        server_name  10.10.100.104;
        charset utf-8;
        location / {
            root  D:\php;
            index  index.html index.htm index.php;
        if (!-e $request_filename) {
        rewrite ^(.*)$ /index.php?s=$1 last;
        break;
    }
        }
        error_page  500 502 503 504  /50x.html;
        location = /50x.html {
            root  html;
        }
        location ~ \.php{
            root          D:\php;
            fastcgi_pass  10.10.100.104:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
}
调出thinkphp项目,定向能通过了,想要的效果出来了。看来nginxwindows的支持还不算很好,有些东西还是很折腾。
参考网址:2goo.info/blog/panjj/other/2010/11/07/136

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。