当前位置:  操作系统/服务器>linux
本页文章导读:
    ▪解析 nginx 常用配置文件      以下配置内容,基于Nginx1.5.3版本。 配置内容如下:   #user  nobody;  worker_processes  1;    #error_log  logs/error.log;  #error_log  logs/error.log  notice;  #error_log  logs/error.log  info;    #pid .........
    ▪nginx平滑重启的方法      nginx的重启分成几种类型,这里我们介绍两种,供大家参考。 1,简单型,先关闭进程,修改你的配置后,重启进程。   代码示例: kill -QUIT `cat /usr/local/nginx/nginx.pid` sudo /usr/local/nginx/nginx 2,.........
    ▪Puppet使用Nginx多端口配置负载均衡      随着公司应用需求的增加,需要不断的扩展,服务器数量也随之增加,当服务器数量不断增加,我们会发现一台puppetmaster压力大,解析缓慢,而且时不时出现“time out”之类的报错, 在Puppet官.........

[1]解析 nginx 常用配置文件
    来源: 互联网  发布时间: 2013-12-24

以下配置内容,基于Nginx1.5.3版本。

配置内容如下:
 

#user  nobody; 
worker_processes  1; 
 
#error_log  logs/error.log; 
#error_log  logs/error.log  notice; 
#error_log  logs/error.log  info; 
 
#pid        logs/nginx.pid; 

events { 
    worker_connections  1024; 

 
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; 
     
    client_header_timeout  30;  #设置客户端请求头读取超时时间,如果在这个时间后客户端还没有发送任何数据,Nginx返回“Request time out(408)”错误。 
    client_body_timeout    30;  #设置客户端请求主体读取超时时间,如果在这个时间后客户端还没有发送任何数据,Nginx返回“Request time out(408)”错误,默认值是60。 
    send_timeout           3m;  #指定响应客户端的超时时间,这个超时仅限于两个阅读活动之间的时间,如果这个时间后客户端没有任何活动,Nginx将会关闭连接。
    
    client_header_buffer_size    1k;   
    large_client_header_buffers  4 4k;   
 
    sendfile        on; 
    tcp_nopush      on;   
    tcp_nodelay     on; 
    #tcp_nopush     on; 
 
    #keepalive_timeout  0; 
    keepalive_timeout  65;  #第一个参数指定客户端连接保持活动的超时时间,在这个时间之后,服务器会关掉连接,第二个参数是可选的,它指定了消息头保持活动的有效时间,即响应中的timeout=time,它可以告诉某些浏览器关闭连接,因此服务器就不必关闭连接了,如果没有这个参数,Nginx不会发送Keep-Alive头。 
 
    gzip  on; 
    #该指令用于开启或关闭gzip模块(on/off) 
    gzip_min_length 1k; 
    #设置允许压缩的页面最小字节数,页面字节数从header头得content-length中进行获取。默认值是0,不管页面多大都压缩。建议设置成大于1k的字节数,小于1k可能会越压越大。 
    gzip_buffers 4 16k; 
    #设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。4 16k代表以16k为单位,安装原始数据大小以16k为单位的4倍申请内存。 
    #gzip_http_version 1.1; 
    #识别http的协议版本(1.0/1.1) 
    gzip_comp_level 2; 
    #gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu) 
    gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/javascript image/gif 
    #匹配mime类型进行压缩,无论是否指定,”text/html”类型总是会被压缩的。 
    gzip_vary on; 
    #和http头有关系,加个vary头,给代理服务器用的,有的浏览器支持压缩,有的不支持,所以避免浪费不支持的也压缩,所以根据客户端的HTTP头来判断,是否需要压缩 
     
    upstream localhost {   
        #根据ip计算将请求分配各那个后端tomcat,许多人误认为可以解决session问题,其实并不能。   
        #同一机器在多网情况下,路由切换,ip可能不同   
        #ip_hash;    
        server localhost:9097 weight=1 max_fails=2 fail_timeout=3s;   
        server localhost:9098 weight=1 max_fails=2 fail_timeout=3s;   
        #jvm_route $cookie_JSESSIONID|sessionid reverse;    #session复制的配置 
        ip_hash;    
    }  
      
    #upstream backend { 
    #   server localhost:9097; 
    #   server localhost:9098; 
    #} 
 
    server { 
        listen       80; 
        server_name  localhost; 
 
        #charset koi8-r; 
 
        #access_log  logs/host.access.log  main; 
 
        #拒绝访问WEB-INF下的文件 
        location ~ ^/(WEB-INF)/ {   
            deny all;   
        }   
   
        ###所以的静态文件人gif、jpg等都在本地打开,存放的目录为html,保存时间为30天   
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css|js|html)$ {   
            root html;   
            access_log off;   
            expires 30d;   
        } 
        location / { 
            root   html; 
            index  login; 
            #include     proxy.conf;  #这个文件是我们新建的,要导入 
            proxy_pass   http://localhost; 
            proxy_redirect    off;#default 
            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_set_header Via    "nginx"; 
            client_max_body_size   10m; 
            client_body_buffer_size   128k; 
            proxy_connect_timeout   1; #90 
            proxy_send_timeout   30; #90 
            proxy_read_timeout   30; #90 
            proxy_buffer_size   4k; 
            proxy_buffers   4 32k; 
            proxy_busy_buffers_size   64k; 
            proxy_temp_file_write_size  64k;   
        } 
 
        #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; 
        } 
 
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80 
        # 
        #location ~ \.php$ { 
        #    proxy_pass   http://127.0.0.1; 
        #} 
 
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 
        # 
        #location ~ \.php$ { 
        #    root           html; 
        #    fastcgi_pass   127.0.0.1:9000; 
        #    fastcgi_index  index.php; 
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name; 
        #    include        fastcgi_params; 
        #} 
 
        # deny access to .htaccess files, if Apache's document root 
        # concurs with nginx's one 
        # 
        #location ~ /\.ht { 
        #    deny  all; 
        #} 
    } 
 
 
    # another virtual host using mix of IP-, name-, and port-based configuration 
    # 
    #server { 
    #    listen       8000; 
    #    listen       somename:8080; 
    #    server_name  somename  alias  another.alias; 
 
    #    location / { 
    #        root   html; 
    #        index  index.html index.htm; 
    #    } 
    #} 
   
    # HTTPS server 
    # 
    #server { 
    #    listen       443; 
    #    server_name  localhost; 
 
    #    ssl                  on; 
    #    ssl_certificate      cert.pem; 
    #    ssl_certificate_key  cert.key; 
 
    #    ssl_session_timeout  5m; 
 
    #    ssl_protocols  SSLv2 SSLv3 TLSv1; 
    #    ssl_ciphers  HIGH:!aNULL:!MD5; 
    #    ssl_prefer_server_ciphers   on; 
 
    #    location / { 
    #        root   html; 
    #        index  index.html index.htm; 
    #    } 
    #}
}


    
[2]nginx平滑重启的方法
    来源: 互联网  发布时间: 2013-12-24

nginx的重启分成几种类型,这里我们介绍两种,供大家参考。

1,简单型,先关闭进程,修改你的配置后,重启进程。
 

代码示例:
kill -QUIT `cat /usr/local/nginx/nginx.pid`
sudo /usr/local/nginx/nginx

2,重新加载配置文件,不重启进程,不会停止处理请求
1)、使用信号加载新的配置
Nginx 支持几个信号,能在它运行时控制其操作。
其中最普通的是 15 ,用来中止运行的进程:
 

代码示例:
# ps aux | egrep '(PID|nginx)'
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      2213  0.0  0.0   6784  2036 ?        Ss   03:01   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
# kill -15 2213

以上可以平滑改变 nginx 配置的选项。

一个好的习惯是,运行平滑重启下,做好配置文件的测试:
 

代码示例:
# nginx -t -c /etc/nginx/nginx.conf
2006/09/16 13:07:10 [info] 15686#0: the configuration file /etc/nginx/nginx.conf syntax is ok
2006/09/16 13:07:10 [info] 15686#0: the configuration file /etc/nginx/nginx.conf was tested successfully
# ps aux | egrep '(PID|nginx)'
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      2213  0.0  0.0   6784  2036 ?        Ss   03:01   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
# kill -HUP 2213
 

当 nginx 接收到 HUP 信号,它会尝试先解析配置文件(如果指定配置文件,就使用指定的,否则使用默认的),成功则应用新的配置文件(例如:重新打开日志文件或监听的套接 字)。

然后,nginx 运行新的工作进程并从容关闭旧的工作进程。通知工作进程关闭监听套接字但是继续为当前连接的客户提供服务。
所有客户端的服务完成后,旧的工作进程被关闭。
如果新的配置文件应用失败,nginx 将继续使用旧的配置进行工作。

以上就是nginx平滑重启的二种方式,希望对大家有所帮助。


    
[3]Puppet使用Nginx多端口配置负载均衡
    来源: 互联网  发布时间: 2013-12-24

随着公司应用需求的增加,需要不断的扩展,服务器数量也随之增加,当服务器数量不断增加,我们会发现一台puppetmaster压力大,解析缓慢,而且时不时出现“time out”之类的报错,

在Puppet官网上找寻解决方案,发现puppetmaster可以配置多端口,结合WEB代理(推荐Nginx),这样puppetmaster承受能力至少可以提升数倍以上,相当于在很大程度上优化了puppet的处理能力。

1.遵循前面的环境设定,这里的服务器环境及软件版本分别为:
服务器系统:CentOS5.8 x86_64
Ruby版本:ruby-1.8.5
Puppet版本:puppet-2.7.9
Nginx版本:nginx-0.8.46

2.Mongrel安装
要使用puppet多端口配置,需要指定mongrel类型,默认没有安装,需要安装:
 

代码示例:
yum install -y rubygem-mongrel

3.配置puppetmaster
在/etc/sysconfig/puppetmaster文件末尾添加如下两行,分别代表多端口、mongrel类型,内容:
 

代码示例:
PUPPETMASTER_PORTS=(8141 8142 8143 8144 8145)
PUPPETMASTER_EXTRA_OPTS="--servertype=mongrel --ssl_client_header=HTTP_X_SSL_SUBJECT"

4.安装Nginx服务
安装之前请确保系统已经安装pcre-devel正则库,然后再编译安装Nginx,需要添加SSL模块参数支持,Nginx的安装过程如下所示:
 

代码示例:
yum -y install pcre-devel
cd /usr/local/src
wget http://nginx.org/download/nginx-0.8.46.tar.gz
tar zxvf nginx-0.8.46.tar.gz
cd nginx-0.8.46
./configure --prefix=/usr/local/nginx --with-http_ssl_module
make && make install && cd ../

添加www用户组及用户:
 

代码示例:
groupadd www
useradd -g www www

5.依据puppet需求来修改配置文件nginx.conf:
 

代码示例:

user www;
worker_processes    8;
events {
worker_connections    65535;
}

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

sendfileon;
tcp_nopush on;

keepalive_timeout    65;
#定义puppet客户端访问puppet-server端日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" $request_length $request_time $time_local'
'$status $body_bytes_sent $bytes_sent $connection $msec "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for $upstream_response_time $upstream_addr $upstream_status ';
access_log    /usr/local/nginx/logs/access.log    main;

upstream puppetmaster {
server 127.0.0.1:8141;
server 127.0.0.1:8142;
server 127.0.0.1:8143;
server 127.0.0.1:8144;
server 127.0.0.1:8145;
}

server {
listen 8140;
root /etc/puppet;
ssl on;
ssl_session_timeout 5m;
#如下为puppetmaster服务器端证书地址   
ssl_certificate /var/lib/puppet/ssl/certs/server.cn7788.com.pem;
ssl_certificate_key /var/lib/puppet/ssl/private_keys/server.cn7788.com.pem;
ssl_client_certificate /var/lib/puppet/ssl/ca/ca_crt.pem;
ssl_crl /var/lib/puppet/ssl/ca/ca_crl.pem;
ssl_verify_client optional;
#File sections
location /production/file_content/files/ {
types { }
default_type application/x-raw;
#定义puppet推送路径别名
alias /etc/puppet/files/;
}
# Modules files sections
location ~ /production/file_content/modules/.+/ {
root /etc/puppet/modules;
types { }
default_type application/x-raw;
rewrite ^/production/file_content/modules/(.+)/(.+)$ /$1/files/$2 break;
}
location / {
##设置跳转到puppetmaster负载均衡
proxy_pass http://puppetmaster;
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;
proxy_set_header X-Client-Verify $ssl_client_verify;
proxy_set_header X-SSL-Subject $ssl_client_s_dn;
proxy_set_header X-SSL-Issuer $ssl_client_i_dn;
proxy_buffer_size 10m;
proxy_buffers 1024 10m;
proxy_busy_buffers_size 10m;
proxy_temp_file_write_size 10m;
proxy_read_timeout 120;
     }
}
}

6.修改完nginx.conf文件以后,要启动nginx及puppet-server。
1,首先关闭puppetmaster进程,然后先启动nginx,不然nginx是会启动失败的,如下:
 

代码示例:
/usr/local/nginx/sbin/nginx
 

nginx占用puppetmaster默认的8140端口后,可以用如下命令来检查8140端口是否被nginx接管,如下所示:
 

代码示例:
lsof -i:8140
 

此命令显示结果表明8140被nginx进程接管,如下所示:
 

COMMAND    PID    USER     FD     TYPE DEVICE SIZE/OFF NODE NAME
nginx     4121    root6u    IPv4    20668    0t0    TCP *:8140 (LISTEN)
nginx     4122    www    6u    IPv4    20668    0t0    TCP *:8140 (LISTEN)

再启动puppetmaster,命令如下所示:
 

代码示例:
service puppetmaster start
 

如果ruby版本为1.8.5的话,等会运行puppetmaster会有如下警告,如下所示:
 

Starting puppetmaster:
Port: 8141** Ruby version is not up-to-date; loading cgi_multipart_eof_fix [OK]
Port: 8142** Ruby version is not up-to-date; loading cgi_multipart_eof_fix [OK]
Port: 8143** Ruby version is not up-to-date; loading cgi_multipart_eof_fix [OK]
Port: 8144** Ruby version is not up-to-date; loading cgi_multipart_eof_fix [OK]
Port: 8145** Ruby version is not up-to-date; loading cgi_multipart_eof_fix [OK]

此段警告的意思为:
It's just a warning. Mongrel wants a Ruby version of at least 1.8.6.
But it still runs just fine with previous versions. Just ignore the warning.
翻译:
Mongrel需要ruby至少是1.8.6以上的版本,但它仍然在当前版本运行,请忽咯当前警告,为了保证整个puppet运行环境的稳定,这里选择沿用1.8.5版本的ruby。
本文出自 “抚琴煮酒” 博客,原文链接:http://andrewyu.blog.51cto.com/1604432/1135955


    
最新技术文章:
▪linux系统中的列出敏感用户的脚本代码
▪a10 config backup for aXAPI
▪一键备份gitolite服务器的Shell脚本
▪nagios 分发文件实现代码
▪阿里云云服务器Linux系统更新yum源Shell脚本
▪一个监控LINUX目录和文件变化的Shell脚本分享
▪Linux下实现SSH免密码登录和实现秘钥的管理、...
▪Shell正则表达式之grep、sed、awk实操笔记
▪3个备份系统文件并邮件发送的Shell脚本分享
▪CentOS 6.3下给PHP添加mssql扩展模块教程
▪监控网站是否可以正常打开的Shell脚本分享
▪shell脚本编程之if语句学习笔记
▪shell脚本编程之循环语句学习笔记
▪shell脚本编程之case语句学习笔记
▪Shell脚本实现的阳历转农历代码分享
▪Shell脚本实现复制文件到多台服务器的代码分...
▪Shell脚本实现批量下载网络图片代码分享
▪Shell脚本实现检测文件是否被修改过代码分享
▪Shell脚本数组用法小结
oracle iis7站长之家
▪C语言实现的ls命令源码分享
▪Linux下查找后门程序 CentOS 查后门程序的shell脚...
▪Shell 函数参数
▪linux shell 自定义函数方法(定义、返回值、变...
▪Shell实现判断进程是否存在并重新启动脚本分...
▪Shell脚本break和continue命令简明教程
▪Shell脚本函数定义和函数参数
▪让代码整洁、过程清晰的BASH Shell编程技巧
▪shell常用重定向实例讲解
▪awk中RS、ORS、FS、OFS的区别和联系小结
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3