设为首页 收藏本站
查看: 843|回复: 0

[经验分享] Nginx配置与应用详解

[复制链接]

尚未签到

发表于 2016-12-23 09:23:43 | 显示全部楼层 |阅读模式
Nginx是由俄罗斯软件工程师Igor Sysoev开发的一个高性能的HTTP和反向代理服务器,具备IMAP/POP3和SMTP服务器功能。Nginx最大的特点是对高并发的支持和高效的负载均衡,在高并发的需求场景下,是Apache服务器不错的替代品。目前,包括新浪、腾讯等知名网站已经开始使用Nginx作为Web应用服务器。

  Nginx配置
1.在Nginx下针对IP和目录限速
Nginx优秀的高并发支持和高效的负载均衡是我们选择它的理由。但有时我们希望它能做的更多。本文将向您介绍如何在Nginx下对IP和目录进行限速,在某种应用场景下,这也是个常见需求。

Nginx可以通过HTTPLimitZoneModule和HTTPCoreModule两个目录来限速。

示例:

limit_zone one $binary_remote_addr 10m;  

location / {   
        limit_conn one 1;   
        limit_rate 100k;   
}
说明:

limit_zone,是针对每个IP定义一个存储session状态的容器。这个示例中定义了一个10m的容器,按照32bytes/session,可以处理320000个session。

然后针对目录进行设定。

limit_conn one 1;
是限制每个IP只能发起一个连接。

limit_rate 100k;
是对每个连接限速100k. 注意,这里是对连接限速,而不是对IP限速。如果一个IP允许两个并发连接,那么这个IP就是限速limit_rate x 2。

2.Nginx配置文件基本应用参考手册
Nginx配置文件有很多需要我们注意很多问题,其中在进行user配置的时候就需要我们引起重视,我们在不断的使用中就会发现这一点,下面是一个简单的Nginx配置文件:

Nginx配置文件引用

user www www;  
worker_processes 8;  
worker_cpu_affinity 00000001 00000010 00000100 00001000
00010000 00100000 01000000;  
error_log /www/log/Nginx_error.log crit;  
pid /usr/local/Nginx/Nginx.pid;  
worker_rlimit_nofile 204800;  
events  
{  
use epoll;  
worker_connections 204800;  
}  
http  
{  
include mime.types;  
default_type application/octet-stream;  
charset utf-8;  
server_names_hash_bucket_size 128;  
client_header_buffer_size 2k;  
large_client_header_buffers 4 4k;  
client_max_body_size 8m;  
sendfile on;  
tcp_nopush on;  
keepalive_timeout 60;  
fastcgi_cache_path /usr/local/Nginx/fastcgi_cache levels=1:2  
keys_zone=TEST:10m  
inactive=5m;  
fastcgi_connect_timeout 300;  
fastcgi_send_timeout 300;  
fastcgi_read_timeout 300;  
fastcgi_buffer_size 4k;  
fastcgi_buffers 8 4k;  
fastcgi_busy_buffers_size 8k;  
fastcgi_temp_file_write_size 8k;  
fastcgi_cache TEST;  
fastcgi_cache_valid 200 302 1h;  
fastcgi_cache_valid 301 1d;   
fastcgi_cache_valid any 1m;  
fastcgi_cache_min_uses 1;  
fastcgi_cache_use_stale error timeout invalid_header http_500;  
open_file_cache max=204800 inactive=20s;  
open_file_cache_min_uses 1;  
open_file_cache_valid 30s;  
tcp_nodelay on;  
gzip on;  
gzip_min_length 1k;  
gzip_buffers 4 16k;  
gzip_http_version 1.0;  
gzip_comp_level 2;  
gzip_types text/plain application/x-javascript text/css
application/xml;  
gzip_vary on;  
server  
{  
listen 8080;  
server_name backup.aiju.com;  
index index.php index.htm;  
root /www/html/;  
location /status  
{  
stub_status on;  
}  
location ~ .*\.(php|php5)?$  
{  
fastcgi_pass 127.0.0.1:9000;  
fastcgi_index index.php;  
include fcgi.conf;  
}  
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$  
{  
expires 30d;  
}  
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 /www/log/access.log access;  
}  
}
上面的代码就是对Nginx配置文件简单问题的详细介绍。

3.Nginx配置中运行与启动的详细介绍

#运行用户   
user nobody nobody;   
#启动进程   
worker_processes 2;   
#全局错误日志及PID文档   
error_log logs/error.log notice;   
pid logs/Nginx.pid;   
#工作模式及连接数上限   
events {   
use epoll;   
worker_connections 1024;   
}   
#设定http服务器,利用他的反向代理功能提供负载均衡支持   
http {   
#设定mime类型   
include conf/mime.types;   
default_type application/octet-stream;   
#设定日志格式   
log_format main '$remote_addr - $remote_user [$time_local] '   
'"$request" $status $bytes_sent '   
'"$http_referer" "$http_user_agent" '   
'"$gzip_ratio"';   
log_format download '$remote_addr - $remote_user [$time_local] '   
'"$request" $status $bytes_sent '   
'"$http_referer" "$http_user_agent" '   
'"$http_range" "$sent_http_content_range"';   
#设定请求缓冲   
client_header_buffer_size 1k;   
large_client_header_buffers 4 4k;   
#开启gzip模块   
gzip on;   
gzip_min_length 1100;   
gzip_buffers 4 8k;   
gzip_types text/plain;   
output_buffers 1 32k;   
postpone_output 1460;   
#设定access log   
access_log logs/access.log main;   
client_header_timeout 3m;   
client_body_timeout 3m;   
send_timeout 3m;   
sendfile on;   
tcp_nopush on;   
tcp_nodelay on;   
keepalive_timeout 65;   
#设定负载均衡的服务器列表   
upstream mysvr {   
#weigth参数表示权值,权值越高被分配到的几率越大   
#本机上的Squid开启3128端口   
server 192.168.8.1:3128 weight=5;   
server 192.168.8.2:80 weight=1;   
server 192.168.8.3:80 weight=6;   
}   
#设定虚拟主机   
server {   
listen 80;   
server_name 192.168.8.1   
www.yejr.com   
;   
charset gb2312;   
#设定本虚拟主机的访问日志   
access_log logs/www.yejr.com.access.log main;   
#假如访问 /img/*, /js/*, /css/* 资源,则直接取本地文档,不通过squid   
#假如这些文档较多,不推荐这种方式,因为通过squid的缓存效果更好   
location ~ ^/(img|js|css)/ {   
root /data3/Html;   
expires 24h;   
}   
#对 "/" 启用负载均衡   
location / {   
proxy_pass http://mysvr;   
proxy_redirect off;   
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 90;   
proxy_send_timeout 90;   
proxy_read_timeout 90;   
proxy_buffer_size 4k;   
proxy_buffers 4 32k;   
proxy_busy_buffers_size 64k;   
proxy_temp_file_write_size 64k;   
}   
#设定查看Nginx状态的地址   
location /NginxStatus {   
stub_status on;   
access_log on;   
auth_basic "NginxStatus";   
auth_basic_user_file conf/htpasswd;   
}   
}   
}  
备注:conf/htpasswd 文档的内容用 apache 提供的 htpasswd 工具来产生即可,内容大致如下:

3.) 查看 Nginx 运行状态 输入地址http://192.168.8.1/NginxStatus/ 。输入验证帐号密码,即可看到类似如下内容:

Active connections: 328   
server accepts handled requests   
9309 8982 28890   
Reading: 1 Writing: 3 Waiting: 324  
第一行表示现在活跃的连接数,第三行的第三个数字表示Nginx运行到。

4.Nginx负载均衡如何进行配置
Nginx负载均衡是一个很神奇的技术,很多人都不能很好的掌握这个技术,今天在这里我们向大家详细的介绍下有关Nginx负载均衡的问题

worker_processes 1;  
events {  
worker_connections 1024;  
}  
http{  
upstream myproject {  
#这里指定多个源服务器,ip:端口,80端口的话可写可不写  
server 192.168.43.158:80;  
server 192.168.41.167;  
}  
server {  
listen 8080;  
location / {  
proxy_pass http://myproject;  
}  
}  
}
Nginx负载均衡有哪些功能呢?

如果后面的服务器其中一台坏了,它能自动识别,更牛的是它好了之后Nginx可以马上识别服务器A和B,如果A的响应时间为3,B的响应时间为1,那么Nginx会自动调整访问B的概率是A的3倍,真正做到Nginx负载均衡好的,安装完成了。我在make的时候报了个错,说HTTP Rewrite 模块 有问题,我就

./configure –without-http_rewrite_module
然后再make,make install就可以了。

安装好了之后新建一个配置文件,把上面的配置文件内容拷进去,当然要修改你的IP,保存为比如 load_balance.conf然后启动:

/usr/local/Nginx/sbin/Nginx -c load_balence.conf

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-318224-1-1.html 上篇帖子: Nginx 定时任务完成日志切割 下篇帖子: centos6.5 安装nginx
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表