欢迎来到nginx
nginx是什么?
过去说到Web服务器大家都会想到Apache,但近年来Nginx迅速增长。这一次作为入门,我们将解释简单的安装、配置和构建等内容。
C10K难题
Nginx是由俄罗斯开发者Igor Sysoev为了解决C10K问题而开发的。C10K问题指的是在一万个客户端的情况下,即使硬件性能没有问题,但当客户端数量太多时,服务器会崩溃的问题。
特点
作为其特点,它具有轻量、高速的特性,并且作为Web服务器还具备以下功能:
– 反向代理
– 负载均衡
– URL重写
– WebDAV(用于Web文件共享)等。
安装
# yum -y install nginx
# apt-get install nginx
启动、重新加载、结束命令
启动:sudo nginx
停止:sudo nginx -s stop
重新加载配置:nginx -s reload
启动检查:nginx -t
配置文件
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
access_log /var/log/nginx/access.log;
keepalive_timeout 65;
location /images/{
images/に適用したい設定
}
gzip on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
worker_processes,这个指令控制着运行nginx的worker进程的数量。通常设置为不超过CPU核心数。
error_log,这个指令用于指定错误日志的输出文件名和日志级别。
pid,这个指令用于设置保存master进程的进程ID的文件。
worker_connections,这个指令用于设置一个worker进程能够同时处理的最大连接数。默认设置为512。
mime.types,这个指令会include /etc/nginx/mime.types文件。
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/x-javascript js;
application/atom+xml atom;
application/rss+xml rss;
・・・・
}
指定access_log的内容为访问日志。
设置keepalive_timeout为服务器端的keepalive超时时间, 默认值为75秒。
设置gzip以压缩响应内容。
设置gzip_disable以忽略gzip压缩的范围。
用途可以是什么?
upstream xxx.domain.com {
#domino server1 information in cluster
server 9.123.159.49:80;
#domino server2 information in cluster
server 9.123.159.153:80;
}
2) 提供静态内容的传递(例如:内容传递网络)。
# コンテンツをgzip圧縮する、効率アップ
gzip on;
通过压缩,不仅可以减轻网络负载,还可以减少传输量,从而缩短传输时间(即信息到达客户端的时间)。
3) nginx的扩展功能
nginx具有很大的可扩展性,经常与其他lib协同使用。
下面给出与几个Lua的协同示例。
※ Lua是一种具有高度可移植性和快速执行速度等特点的脚本语言。
location / {
rewrite_by_lua '
local res = ngx.location.capture("/check-spam")
if res.body == "spam" then
-- 利用規約ページへ
ngx.redirect("/terms-of-use.html")
end
';
fastcgi_pass ...;
}
location @client{
proxy_pass http://www.domain.com;
}
location ~ /test {
default_type text/html;
content_by_lua 'ngx.say("this is domain.com!")';
access_by_lua '
-- check the client IP address is in our black list
if ngx.var.remote_addr == "10.0.0.100" then
ngx.exit(ngx.HTTP_FORBIDDEN)
end
if ngx.var.remote_addr == "10.0.0.112" then
ngx.exec("@client")
end
';
}
nginx不适用
由于CPU资源消耗过大,其他执行的任务无法进行,因此处理能力一下子就会下降。
常见的建筑
前端使用nginx,后端使用Apache (nginx)。