admin 管理员组

文章数量: 887021


2024年2月18日发(作者:notification helper)

nginx 在win7的安装与运行

本来想在windows7上安装Nginx,然后部署thinkphp的,过程中遇到了一些小问题,所以都记录下来!供以后查阅!几个细节的东西,有必要写清楚!

官网上下载地址:/en/

就那最新的版本做实验吧。我下了 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 way forbidden

by its access permissions>

看提示信息,是因为windows 的80 端口被占用了,所以又想办法把80端口释放了。开始–运行–cmd 进入命令提示符 输入netstat -ano 即可看到所有连接的PID 之后在任务管理器中找到这个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环境的时候,有遇到了问题。我明明修改了的参数了,在重新启动的时候,都是无效的,很是郁闷,所以php环境配置无法配置成功了。仔细检查了配置文件的语法错误,发现了一些错误,修改过来了,仍然无效,干脆恢复原来的配置文件,还是老样子,这么一来就奇怪了。压根重启是无效的。

官方的文档很清楚:

nginx -s stop

nginx -s quit

quick exit

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,需支持Rewrite和Path_info,在网上找了一下,有两种办法

第一种,最简单的方法:

加上一句

location ~ .php {

fastcgi_pass 127.0.0.1:9000;

fastcgi_index ;

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 ;

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 ;

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 ;

if (!-e $request_filename) {

rewrite ^(.*)$ /?s=$1 last;

break;

}

}

error_page 500 502 503 504 /;

location = / {

root html;

}

location ~ .php{

root D:php;

fastcgi_pass 10.10.100.104:9000;

fastcgi_index ;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_param PATH_INFO$fastcgi_script_name;

include fastcgi_params;

}

}

调出thinkphp项目,定向能通过了,想要的效果出来了。看来nginx对windows的支持还不算很好,有些东西还是很折腾。

}

参考网址:/blog/panjj/other/2010/11/07/136


本文标签: 端口 启动 没有 时候 占用