web服务器 IIS、Apache和Ngnix基础( 五 )


web服务器 IIS、Apache和Ngnix基础

文章插图
 
 
四、Nginx 及其简单配置4.1、Nginx定义Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的 。从2004年发布至今 , 凭借开源的力量 , 已经接近成熟与完善 。
Nginx功能丰富 , 可作为HTTP服务器 , 也可作为反向代理服务器 , 邮件服务器 。支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能 。并且支持很多第三方的模块扩展 。
 
目前apache和nginx好像还没有看到像IIS一样的可视化配置 。在windows和linux上 , apache和nginx 都是以编辑配置文件的形式来配置 。
 
4.2、nginx功能1、反向代理
正向代理:某些情况下 , 代理我们用户去访问服务器 , 需要用户手动的设置代理服务器的ip和端口号 。
反向代理:是用来代理服务器的 , 代理我们要访问的目标服务器 。代理服务器接受请求 , 然后将请求转发给内部网络的服务器(集群化) , 并将从服务器上得到的结果返回给客户端 , 此时代理服务器对外就表现为一个服务器 。
2、负载均衡
多在高并发情况下需要使用 。其原理就是将数据流量分摊到多个服务器执行 , 减轻每台服务器的压力 , 多台服务器(集群)共同完成工作任务 , 从而提高了数据的吞吐量 。
3、动静分离
Nginx提供的动静分离是指把动态请求和静态请求分离开 , 合适的服务器处理相应的请求 , 使整个服务器系统的性能、效率更高 。
4.3、nginx配置及其优化1、 目录结构
相对而言 , nginx的目录结构比较简单、松散 。在
conf:文件夹包含了nginx的所有配置文件 , 在nginx安装目录下
log: 包含nginx的访问日志和错误日志 , 可在配置中自定义
html: 网站根目录地址 , 可在配置中自定义
sbin: nginx命令的目录
proxy_temp , scgi_temp , uwsgi_temp , 临时目录
 
2、nginx.conf 主配置文件详解
```
user nginx nginx; #定义Nginx运行的用户和用户组worker_processes 1; #nginx进程数 , 建议设置为等于CPU总核心数 。events{use epoll; #参考事件模型 , use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; worker_connections 65535;#单个进程最大连接数(最大连接数=连接数*进程数)}error_log /var/log/nginx/error.log info; #全局错误日志定义类型 , [ debug | info | notice | warn | error | crit ]pid /var/run/nginx.pid;#进程文件worker_rlimit_nofile 1024; #一个nginx进程打开的最多文件描述符数目 , 理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除 , 但是nginx分配请求并不均匀 , 所以#建议与ulimit -n的值保持一致http {#HTTP区块开始includemime.types;#Nginx支持的媒体类型库文件default_typeapplication/octet-stream;#默认的媒体类型sendfileon;#开启高效传输模式keepalive_timeout65;#连接超时server {#第一个Server区块开始 , 表示一个独立的虚拟主机站点listen80;#提供服务的端口 , 默认80server_namelocalhost;#提供服务的域名主机名location / {#第一个location区块开始roothtml;#站点的根目录 , 相当于Nginx的安装目录indexindex.html index.htm;#默认的首页文件 , 多个用空格分开} error_page504/50x.html;#出现对应的http状态码时 , 使用50x.html回应客户location = /50x.html {#location区块开始 , 访问50x.htmlroothtml; #指定对应的站点目录为html}}include vhosts.conf;#虚拟机配置引用}```
 
3、vhosts.conf 虚拟机配置文件详解
 
```
server{listen 80; #监听端口server_name localhost; #提供服务的域名主机名indexindex.php index.html;#站点目录首页文件root"D:/phpStudy/PHPTutorial/WWW/网站代码";#网站代码根目录#sslon;#ssl服务开启#ssl_certificatecert.pem;#ssl证书#ssl_certificate_keycert.key;#ssl 证书keylocation / { #第一个location区块开始root html;#站点的根目录 , 相当于Nginx的安装目录index index.html index.htm index.jsp;#默认的首页文件 , 多个用空格分开}#第一个location区块结果#charset utf-8;#默认编码server_names_hash_bucket_size 128;#服务器名字的hash表大小client_header_buffer_size 32k;#上传文件大小限制large_client_header_buffers 4 64k;#设定请求缓client_max_body_size 8m; #设定请求缓sendfile on;#开启高效文件传输模式 , sendfile指令指定nginx是否调用sendfile函数来输出文件 , 对于普通应用设为 on , 如果用来进行下载等应用磁盘IO重负载应用 , 可设置为o #ff , 以平衡磁盘与网络I/O处理速度 , 降低系统的负载 。注意:如果图片显示不正常把这个改成off 。autoindex on;#开启目录列表访问 , 合适下载服务器 , 默认关闭 。tcp_nopush on;#防止网络阻塞tcp_nodelay on;#防止网络阻塞keepalive_timeout 120;#连接超时 , 单位是秒#FastCGI相关参数是为了改善网站的性能:减少资源占用 , 提高访问速度 。fastcgi_connect_timeout 300;fastcgi_send_timeout 300;fastcgi_read_timeout 300;fastcgi_buffer_size 64k;fastcgi_buffers 4 64k;fastcgi_busy_buffers_size 128k;fastcgi_temp_file_write_size 128k;#gzip模块设置gzip on; #开启gzip压缩输出gzip_min_length 1k;#最小压缩文件大小gzip_buffers 4 16k;#压缩缓冲区gzip_http_version 1.0;#压缩版本(默认1.1 , 前端如果是squid2.5请使用1.0)gzip_comp_level 2; #压缩等级gzip_types text/x-JavaScript text/css application/xml; #压缩类型 , 默认就已经包含text/html , 所以下面就不用再写了 , 写上去也不会有问题 , 但是会有一个warn 。gzip_vary on;#limit_zone crawler $binary_remote_addr 10m;#开启限制IP连接数的时候需要使用#图片缓存时间设置location ~ .*.(gif|jpg|jpeg|png|bmp|swf)${expires 10d;}#JS和CSS缓存时间设置location ~ .*.(js|css)?${expires 1h;}#日志格式设定log_format access '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" $http_x_forwarded_for';access_log /var/log/nginx/access_$(data+%F -d -1day).log access; #定义本虚拟主机的访问日志location / {#对 "/" 启用反向代理proxy_pass http://127.0.0.1:88;proxy_redirect off;proxy_set_header X-Real-IP $remote_addr;#后端的Web服务器可以通过X-Forwarded-For获取用户真实IPproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#以下是一些反向代理的配置 , 可选proxy_set_header Host $host;client_max_body_size 10m; #允许客户端请求的最大单文件字节数client_body_buffer_size 128k;#缓冲区代理缓冲用户端请求的最大字节数 , proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)proxy_send_timeout 90;#后端服务器数据回传时间(代理发送超时)proxy_read_timeout 90; #连接成功后 , 后端服务器响应时间(代理接收超时)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服务器传}#设定查看Nginx状态的地址location /NginxStatus {stub_status on;access_log on;auth_basic "NginxStatus";auth_basic_user_file conf/htpasswd; #htpasswd文件的内容可以用apache提供的htpasswd工具来产生 。}#本地动静分离反向代理配置#所有jsp的页面均交由Tomcat或resin处理location ~ .(jsp|jspx|do)?$ {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_pass http://127.0.0.1:8080;}#所有静态文件由nginx直接读取不经过tomcat或resinlocation ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)${ expires 15d; }location ~ .*.(js|css)?${ expires 1h; }}}


推荐阅读