1. 首页
  2. >
  3. 服务器技术
  4. >
  5. Nginx

Ngnix服务器详解(Windows版本)

文章大纲

一、Ngnix简介二、Ngnix安装三、Ngnix之静态资源访问四、Ngnix正向代理与反向代理五、Ngnix之虚拟主机配置六、Ngnix之负载均衡七、Ngnix之访问控制八、Ngnix日志管理九、Ngnix配置https访问十、Ngnix配置文件详解十一、参考资料下载十二、参考文章

Ngnix服务器详解(Windows版本)

一、Ngnix简介

1. 什么是nginx

  Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师Igor Sysoev所开发,官方测试nginx能够支支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。

2. Nginx的应用场景

(1)http静态服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器,图片服务器和文件服务器(2)虚拟主机。当一台部署单个应用的web服务器资源过剩时,可以在该服务器上部署多个应用,用nginx来做反向代理,把访问服务器的http请求正确的给到其中的某一个应用。(一台服务器上有多个带域名的应用,多个域名解析同一个IP地址,但是端口号不同)(3)反向代理,负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理。并且多台服务器可以平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况

3. Nginx与Apache比较

3.1 Apache简介  Apache HTTP服务器是一个模块化的服务器,可以运行在几乎所有广泛使用的计算机平台上。其属于应用服务器。Apache支持模块多,性能稳定,Apache本身是静态解析,适合静态HTML、图片等,但可以通过扩展脚本、模块等支持动态页面等。

3.2 nginx相对于apache的优点(1)轻量级,同样起web 服务,比apache占用更少的内存及资源(2)抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能(3)高度模块化的设计,编写模块相对简单(4)提供负载均衡(5)社区活跃,各种高性能模块出品迅速

3.3 apache 相对于nginx 的优点(1)apache的 rewrite 比nginx 的强大 ;(2)支持动态页面;(3)支持的模块多,基本涵盖所有应用;(4)性能稳定,而nginx相对bug较多。

3.4 两者优缺点对比(1)Nginx 配置简洁, Apache 复杂 ;(2)Nginx 静态处理性能比 Apache 高 3倍以上 ;(3)Apache 对 PHP 支持比较简单,Nginx 需要配合其他后端用;(4)Apache 的组件比 Nginx 多 ;(5)动态请求(比如jsp、asp)由apache去做,nginx只适合静态和反向;(6)Apache在处理动态有优势,Nginx并发性比较好,CPU内存占用低,如果rewrite频繁,那还是Apache较适合。

二、Ngnix安装

1. 下载nginx

下载地址:http://nginx.org/en/download.html直接下载 nginx-1.12.2.zip,下载后解压,解压后如下

Ngnix服务器详解(Windows版本)

2. 启动nginx

有很多种方法启动nginx(1)直接双击nginx.exe,双击后一个黑色的弹窗一闪而过(2)打开cmd命令窗口,切换到nginx解压目录下,输入命令 nginx.exe 或者 start nginx ,回车即可3.检查nginx是否启动成功直接在浏览器地址栏输入网址 http://localhost:80,回车,出现以下页面说明启动成功

Ngnix服务器详解(Windows版本)

3. 关闭nginx

如果使用cmd命令窗口启动nginx,关闭cmd窗口是不能结束nginx进程的,可使用两种方法关闭nginx(1)输入nginx命令 nginx -s stop(快速停止nginx) 或 nginx -s quit(完整有序的停止nginx)(2)使用taskkill taskkill /f /t /im nginx.exe

4. ngnix开机自动启动服务注册

下载Windows Service Wrapper,下载后内容如下(参考资料下载内容中已有安装包)

Ngnix服务器详解(Windows版本)

将重命名后的 myapp.exe 复制到 nginx 的安装目录(我这里是 "F:\kaifa_ruanjian\nginx-1.10.3")

Ngnix服务器详解(Windows版本)

在同一个nginx目录下创建一个Windows Service Wrapper的XML配置文件,名称必须与第一步重命名时使用的名称一致,比如我这里的是winsw-1.9-bin.xmlwinsw-1.9-bin.xml文件内容如下:

<?xml version="1.0" encoding="UTF-8" ?>
<service>
<id>nginx</id>
<name>nginx</name>
<description>nginx</description>
<executable>D:\NeatbeansSofts\Redis-x64-3.2.100\nginx.exe</executable>
<logpath>D:\NeatbeansSofts\Redis-x64-3.2.100\</logpath>
<logmode>roll</logmode>
<depend></depend>
<startargument>-p D:\NeatbeansSofts\Redis-x64-3.2.100</startargument>
<stopargument>-p D:\NeatbeansSofts\Redis-x64-3.2.100 -s stop</stopargument>
</service>

命令行下执行以下命令,以便将其安装成Windows服务。

Ngnix服务器详解(Windows版本)

Ngnix服务器详解(Windows版本)

Ngnix服务器详解(Windows版本)

其他命令介绍:卸载服务:winsw-1.9-bin.exe uninstall启动服务:winsw-1.9-bin.exe start停止服务:winsw-1.9-bin.exe stop

5. linux版本的ngnix安装

请在参考资料下载内容中进行学习。

三、Ngnix之静态资源访问

  配置方法有两种,一种是root关键字、另外一种是alias关键字

1. 访问前准备

建立一个文件夹,命名为:ngnix_picture,并放入图片,bbb.jpg

Ngnix服务器详解(Windows版本)

2. root关键字

在ngnix的配置文件nginx.conf添加以下内容:

    #此时,通过浏览器访问http://127.0.0.1:7002/t.txt,则访问服务器的文件是F:/kaifa_ruanjian/ngnix_picture/t.txt
server{
listen 7002;
server_name 127.0.0.1;
location / {
root F:/kaifa_ruanjian/ngnix_picture/;
}
}

在浏览器中输入访问地址:http://127.0.0.1:7002/bbb.jpg,结果如下图所示:

Ngnix服务器详解(Windows版本)

3. alias关键字

在ngnix的配置文件nginx.conf添加以下内容:

    #此时,通过浏览器访问http://127.0.0.1:7003/file/t.txt,则访问服务器的文件是F:/kaifa_ruanjian/ngnix_picture/t.txt
server{
listen 7003;
server_name 127.0.0.1;
location /file/ {
alias F:/kaifa_ruanjian/ngnix_picture/;
}
}

在浏览器中输入访问地址:http://127.0.0.1:7003/file/bbb.jpg,结果如下图所示:

Ngnix服务器详解(Windows版本)

4. 总结

  上述两种方法均可达到目的,区别是它们对路径的解析方式不同,alas会把指定路径当作文件路径,而root会把指定路径接到文件路径,再进行访问。

四、Ngnix正向代理与反向代理

1. 什么是代理

  说到代理,首先我们要明确一个概念,所谓代理就是一个代表、一个渠道;  此时就设计到两个角色,一个是被代理角色,一个是目标角色,被代理角色通过这个代理访问目标角色完成一些任务的过程称为代理操作过程;如同生活中的专卖店~客人到adidas专卖店买了一双鞋,这个专卖店就是代理,被代理角色就是adidas厂家,目标角色就是用户。

Ngnix服务器详解(Windows版本)

2. 正向代理

  说反向代理之前,我们先看看正向代理,正向代理也是大家最常接触的到的代理模式,我们会从两个方面来说关于正向代理的处理模式,分别从软件方面和生活方面来解释一下什么叫正向代理  在如今的网络环境下,我们如果由于技术需要要去访问国外的某些网站,此时你会发现位于国外的某网站我们通过浏览器是没有办法访问的,此时大家可能都会用一个操作FQ进行访问,FQ的方式主要是找到一个可以访问国外网站的代理服务器,我们将请求发送给代理服务器,代理服务器去访问国外的网站,然后将访问到的数据传递给我们!  上述这样的代理模式称为正向代理,正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。

Ngnix服务器详解(Windows版本)

2. 反向代理

  明白了什么是正向代理,我们继续看关于反向代理的处理方式,举例如我大天朝的某宝网站,每天同时连接到网站的访问人数已经爆表,单个服务器远远不能满足人民日益增长的购买欲望了,此时就出现了一个大家耳熟能详的名词:分布式部署;也就是通过部署多台服务器来解决访问人数限制的问题;某宝网站中大部分功能也是直接使用nginx进行反向代理实现的,并且通过封装nginx和其他的组件之后起了个高大上的名字:Tengine,有兴趣的童鞋可以访问Tengine的官网查看具体的信息:http://tengine.taobao.org/  那么反向代理具体是通过什么样的方式实现的分布式的集群操作呢,我们先看一个示意图:

Ngnix服务器详解(Windows版本)

  通过上述的图解大家就可以看清楚了,多个客户端给服务器发送的请求,nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。此时~请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,nginx扮演的就是一个反向代理角色  反向代理,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息!所以负载均衡就是反向代理的一个典型例子。项目场景

Ngnix服务器详解(Windows版本)

五、Ngnix之虚拟主机配置

1. 虚拟主机类型

(1)基于域名的虚拟主机 : 不同的域名 相同的IP(应用:外部网站)(2)基于端口的虚拟主机 : 不使用域名、IP来区分不同站点的内容,而是用不同的TCP端口号(应用:公司内部网站,外部网站的管理后台)(3)基于IP地址的虚拟主机 : 不同的域名 不同的IP ( 需要加网络接口 ,应用的不广泛)  由于基于IP地址的虚拟主机需要添加网络接口 使用不广泛,所以下面只对基于域名的虚拟主机和基于端口的虚拟主机 进行介绍。

2. 基于域名的虚拟主机

worker_processes 1;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;

server {
listen 80;
server_name www.nginx01.com;
location / {
root html;
index index.html index.htm;
}
}

server {
listen 80;
server_name www.nginx02.com;
location / {
root /root/html;
index index.html index.htm;
}
}
}

3. 基于端口的虚拟主机

user root root; #说明:这里的user根据 自己的nginx.conf文件所在的目录的属主属性而定 
worker_processes 1;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;

server {
listen 80;
server_name www.nginx01.com;
location / {
root html;
index index.html index.htm;
}
}

server {
listen 8080;
server_name www.nginx01.com;
location / {
root /root/html;
index index.html index.htm;
}
}
}

4. 基于端口的虚拟主机

user root root; #说明:这里的user根据 自己的nginx.conf文件所在的目录的属主属性而定 
worker_processes 1;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;

server {
listen 10.219.24.26:80;
server_name www.nginx01.com;
location / {
root html;
index index.html index.htm;
}
}

server {
listen 10.219.24.27:80;
server_name www.nginx01.com;
location / {
root /root/html;
index index.html index.htm;
}
}
}

六、Ngnix之负载均衡

1. 参数配置

找到nginx.conf文件(在安装文件conf文件夹中),配置以下内容:

#设定负载均衡的服务器列表
#upstream表示负载服务器池,定义名字为hello 的服务器池
#weigth参数表示权值,权值越高被分配到的几率越大
upstream hello {
server localhost:8080 weight=2;
server localhost:8090 weight=2;
}

#监听端口
server {
listen 8899;
server_name localhost;
#匹配以jsp结尾的,tomcat的网页文件是以jsp结尾
location / {
index index.jsp;
proxy_pass http://hello; #在这里设置一个代理,和upstream的名字一样
#以下是一些反向代理的配置可删除
proxy_redirect off;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数
proxy_connect_timeout 300; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 300; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 300; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传
}

}

2. 访问测试

Ngnix服务器详解(Windows版本)

Ngnix服务器详解(Windows版本)

七、Ngnix之访问控制

1. 访问控制类型

nginx访问控制的两种方法,一种是基于Basic Auth认证,另一种是基于IP的访问控制Basic Auth认证基于用户授权的访问控制当客户端想要访问相应的网站或者目录,要求用户输入用户名和密码才能访问。基于IP的访问控制(1)deny IP/IP段 : 拒绝某个IP或IP段的客户端访问(2)allow IP/IP段 : 允许某个IP或IP段的客户端访问(3)规则从上往下执行,如匹配停止,不再往下匹配

2. Basic Auth认证

找到nginx.conf文件(在安装文件conf文件夹中),配置以下内容:

#此时,通过浏览器访问http://127.0.0.1:7003/file/t.txt,则访问服务器的文件是F:/kaifa_ruanjian/ngnix_picture/t.txt
server{
listen 7003;
server_name 127.0.0.1;
location /file/ {
alias F:/kaifa_ruanjian/ngnix_picture/;
#备注:一定要注意auth_basic_user_file路径,否则会不厌其烦的出现403。
auth_basic "welcom to kevin home" ;
auth_basic_user_file conf/htpasswd;
}
}

在conf文件夹中新建文件htpasswd

Ngnix服务器详解(Windows版本)

内容如下:

用户名:密码:注释
admin:1234

重新生效配置文件后,在浏览器输入http://127.0.0.1:7003/file/bbb.jpg,出现以下页面

Ngnix服务器详解(Windows版本)

3. 基于IP的访问控制

3.1 控制方法

location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny all;
#从上到下的顺序,类似iptables。匹配到了便跳出。如上的例子先禁止了192.16.1.1,接下来允许了3个网段,其中包含了一个ipv6,最后未匹配的IP全部禁止访问.被deny的将返回403状态码。
}

3.2 IP的访问控制局限性  基于客户端的IP,但是对于Nginx来说,它不会管你哪个是真正的客户端,如果我们的访问不是客户端与服务端直接连接,而是通过了一层代理,比如它的代理可以负载均衡、CDN的这种代理实现,也就是我们的访问不是客户端直接访问的服务端,而是通过其他的中间件访问服务端,这时候会出现一个问题,因为Nginx的access_module它是基于remote_addr这个变量来识别客户端的IP的,那么如果一个ip通过中间件访问服务端,那么Nginx认为访问的ip就是中间件的IP,那么我们在基于IP做限制的时候,那么其实是没有作用的。所以这样的话,准确性是不高的,所以就是利用nginx的access_module有局限性。

八、Ngnix日志管理

1. Ngnix日志类型与存储位置

在nginx 的日志目录logs下,默认有以下3个文件:(1)access.log:记录请求日志(2)0error.log:记录错误日志,例如启动时端口被占用,请求的资源不存在等。(3)nginx.pid:记录启动时nginx的进程id  nginx的日志配置是在conf/nginx.conf文件中

2. Ngnix日志分割

  nginx默认不会对日志做分割,随着时间的积累,access.log和error.log将会越来越大,非常不便于我们查看日志。

首先创建bat脚本 split_log.bat , 并保存在nginx 目录下:

@echo off
rem 查看系统中正在运行的nginx进程
rem tasklist /fi "imagename eq nginx.exe"
rem 备份并根据时间重命名访问日志文件
NET STOP "nginx"
set "cmdstr=move C:\nginx\logs\access.log C:\nginx\logsHis\access.%date:~0,4%-%date:~5,2%-%date:~8,2%.log
call %cmdstr%"
rem 备份并根据时间重命名错误日志文件
set "cmdstr=move C:\nginx\logs\error.log C:\nginx\logsHis\error.%date:~0,4%-%date:~5,2%-%date:~8,2%.log
call %cmdstr%"
rem re-opening log files
NET START "nginx"

创建计划任务

Ngnix服务器详解(Windows版本)

Ngnix服务器详解(Windows版本)

Ngnix服务器详解(Windows版本)

九、Ngnix配置https访问

1. https基础知识

https://www.cnblogs.com/WUXIAOCHANG/p/10553949.html

2. 配置方式

证书生成完毕,ssl文件夹中一共生成如下4个文件,我们需要使用到的是lee.crt和lee.key

Ngnix服务器详解(Windows版本)

修改nginx.conf文件

# HTTPS server
#
#modify by lee 20160907 for https -s
server {
listen 443 ssl;
server_name www.lee.com;

ssl_certificate C:/wnmp/nginx/ssl/lee.crt;
ssl_certificate_key C:/wnmp/nginx/ssl/lee.key;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;

ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

location / {
root C:/wnmp/lee;
index index.html index.htm index.php;
}

root C:/wnmp/lee;
fastcgi_pass 127.0.0.1:9001;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
#modify by lee 20160907 for https -s

重启nginx,在浏览器中,访问 https://www.lee.com。发现出现证书认证,并能够成功访问。(www.lee.com为生成证书时,Common Name输入的域名)(执行此步骤时,需要配置好Virtual Host,并且在www.lee.com开放目录中添加了index.php默认入口访问文件。)

Ngnix服务器详解(Windows版本)

上面的https被红色划线是因为我们使用的是自己生成的证书,此证书不受浏览器信任,如果想使其变为绿色,则需要向证书管理机构进行申请。

添加重定向,自动跳转使用https,在nginx.conf中virtual host中如下代码位置添加一行代码:

listen       80;                    
server_name www.lee.com;
#modify by lee 20160907 for https Redirect -s
rewrite ^(.*) https://$server_name$1 permanent;
#modify by lee 20160907 for https Redirect -e

重启nginx,访问www.lee.com,会发现浏览器自动跳转到https://www.lee.com,并能够成功访问。至此,https访问配置成功完成。

十、Ngnix配置文件详解

例子1

  这是一个比较完整的nginx配置文件示例,下面的nginx.conf简单的实现nginx在前端做反向代理服务器的例子,处理js、png等静态文件,jsp等动态请求转发到其它服务器tomcat,以及负载均衡的配置。

user  www www;
worker_processes 2;

error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

pid logs/nginx.pid;


events {
use epoll;
worker_connections 2048;
}


http {
include mime.types;
default_type application/octet-stream;

#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';

#access_log logs/access.log main;

sendfile on;
# tcp_nopush on;

keepalive_timeout 65;

# gzip压缩功能设置
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 6;
gzip_types text/html text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
gzip_vary on;

# http_proxy 设置
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 75;
proxy_send_timeout 75;
proxy_read_timeout 75;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_temp_path /usr/local/nginx/proxy_temp 1 2;

# 设定负载均衡后台服务器列表
upstream backend {
#ip_hash;
server 192.168.10.100:8080 max_fails=2 fail_timeout=30s ;
server 192.168.10.101:8080 max_fails=2 fail_timeout=30s ;
}

# 很重要的虚拟主机配置
server {
listen 80;
server_name itoatest.example.com;
root /apps/oaapp;

charset utf-8;
access_log logs/host.access.log main;

#对 / 所有做负载均衡+反向代理
location / {
root /apps/oaapp;
index index.jsp index.html index.htm;

proxy_pass http://backend;
proxy_redirect off;
# 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;

}

#静态文件,nginx自己处理,不去backend请求tomcat
location ~* /download/ {
root /apps/oa/fs;

}
location ~ .*\.(gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
{
root /apps/oaapp;
expires 7d;
}
location /nginx_status {
stub_status on;
access_log off;
allow 192.168.10.0/24;
deny all;
}

location ~ ^/(WEB-INF)/ {
deny all;
}
#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

## 其它虚拟主机,server 指令开始
}

例子2

#运行用户
user nobody;
#启动进程,通常设置成和cpu的数量相等
worker_processes 1;

#全局错误日志及PID文件
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid;

#工作模式及连接数上限
events {
#epoll是多路复用IO(I/O Multiplexing)中的一种方式,
#仅用于linux2.6以上内核,可以大大提高nginx的性能
use epoll;

#单个后台worker process进程的最大并发链接数
worker_connections 1024;

# 并发总数是 worker_processes 和 worker_connections 的乘积
# 即 max_clients = worker_processes * worker_connections
# 在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4 为什么
# 为什么上面反向代理要除以4,应该说是一个经验值
# 根据以上条件,正常情况下的Nginx Server可以应付的最大连接数为:4 * 8000 = 32000
# worker_connections 值的设置跟物理内存大小有关
# 因为并发受IO约束,max_clients的值须小于系统可以打开的最大文件数
# 而系统可以打开的最大文件数和内存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右
# 我们来看看360M内存的VPS可以打开的文件句柄数是多少:
# $ cat /proc/sys/fs/file-max
# 输出 34336
# 32000 < 34336,即并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内
# 所以,worker_connections 的值需根据 worker_processes 进程数目和系统可以打开的最大文件总数进行适当地进行设置
# 使得并发总数小于操作系统可以打开的最大文件数目
# 其实质也就是根据主机的物理CPU和内存进行配置
# 当然,理论上的并发总数可能会和实际有所偏差,因为主机还有其他的工作进程需要消耗系统资源。
# ulimit -SHn 65535

}


http {
#设定mime类型,类型由mime.type文件定义
include mime.types;
default_type application/octet-stream;
#设定日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log logs/access.log main;

#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
#对于普通应用,必须设为 on,
#如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,
#以平衡磁盘与网络I/O处理速度,降低系统的uptime.
sendfile on;
#tcp_nopush on;

#连接超时时间
#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;

#开启gzip压缩
gzip on;
gzip_disable "MSIE [1-6].";

#设定请求缓冲
client_header_buffer_size 128k;
large_client_header_buffers 4 128k;


#设定虚拟主机配置
server {
#侦听80端口
listen 80;
#定义使用 www.nginx.cn访问
server_name www.nginx.cn;

#定义服务器的默认网站根目录位置
root html;

#设定本虚拟主机的访问日志
access_log logs/nginx.access.log main;

#默认请求
location / {

#定义首页索引文件的名称
index index.php index.html index.htm;

}

# 定义错误提示页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}

#静态文件,nginx自己处理
location ~ ^/(images|javascript|js|css|flash|media|static)/ {

#过期30天,静态文件不怎么更新,过期可以设大一点,
#如果频繁更新,则可以设置得小一点。
expires 30d;
}

#PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.
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;
}

#禁止访问 .htxxx 文件
location ~ /.ht {
deny all;
}

}
}

例子3

user  www www;  #指定Nginx Worker进程运行用户以及用户组

worker_processes 2; #指定了Nginx要开启的进程数,多核CPU指定和核数一样多的进程数

pid logs/nginx.pid; #指定进程id的存储文件位置

worker_rlimit_nofile 65535; #指定单进程打开文件数,需与系统设定一致



events {

use epoll; #指定nginx工作模式,nginx主要的工作模式有select、poll、kqueue、epoll

其中select、poll是标准工作模式,kqueue、epoll为高效工作模式,epoll用在Linux系统中,而kqueue用在BSD系统中

worker_connections 65535;#指定单进程的最大连接数

}



HTTP部分



http {

include mime.types; #指定配置文件所包含的文件

default_type application/octet-stream; #指定默认类型为二进制流,也就是当文件类型未定义时使用这种方式,例如在没有配置PHP环境时,Nginx是不予解析的,此时,用浏览器访问PHP文件就会出现下载窗口



log_format main '$remote_addr - $remote_user [$time_local] "$request" '#设定日志格式

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';;





client_max_body_size 20m; #设置允许客户端请求的最大的单个文件字节数

client_header_buffer_size 16k;#指定来自客户端请求头的headerbuffer大小,如果自定义了消息头或有更大的cookie,可以在这里增加缓冲大小

large_client_header_buffers 4 32k;#指定客户端请求中较大的消息头的缓存最大数量和大小,4为个数,32k为大小,最大缓存为4个32kb



sendfile on;#开启高效传输模式

tcp_nopush on; # tcp_nopush,tcp_nodelay设置on,防止网络阻塞

tcp_nodelay on;



keepalive_timeout 65; #指定客户端连接保持活动的超时时间

client_header_timeout 10;#指定客户端请求头读取超时时间,如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out(408)”错误

client_body_timeout 10;#指定客户端请求主体读取超时时间,如果超过这个时间���客户端还没有发送任何数据,Nginx将返回“Request time out(408)”错误

send_timeout 10;#指定响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接





gzip on; #开启gzip压缩,实时压缩输出数据流

gzip_min_length 1k; #设置允许压缩的页面最小字节数

gzip_buffers 4 16k; #指定内存空间来存贮压缩结果,这里指定4个单位为16k的内存来存储压缩结果,即总大小为64k

gzip_http_version 1.1;#指定识别HTTP协议版本,默认是1.1

gzip_comp_level 2;#指定gzip压缩比,1 压缩比最小,处理速度最快;9 压缩比最大,传输速度快,但处理最慢,也比较消耗CPU资源

gzip_types text/plain application/x-javascript text/css application/xml;#指定压缩的类型,无论是否指定,“text/html”类型总是会被压缩

gzip_vary on;#该选项开启可以让前端的缓存服务器缓存经过gzip压缩的页面,例如,用Varnish缓存经过Nginx压缩的数据



server_tokens off;#隐藏Nginx版本号



server {

listen 8000; #指定Nginx监端口

server_name localhost;#用来指定IP或者域名



charset utf-8;#指定Nginx默认的字符集,只有utf-8支持中文字符

access_log logs/host.access.log main;#指定访问日志的名称及位置



location / {

index index.html index.htm;#设定默认首页

root /tom/webapps/ROOT;#指定网页根目录

}



location ~ (jsp|\?) { #指定url中包含jsp或者?的全部转发到192.168.0.10的80端口即tomcat处理

proxy_pass http://192.168.0.10:80;

}