当前访客身份:游客 [ 登录  | 注册加入尚学堂]
启用新域名sxt.cn
新闻资讯

nginx 初探

helloworld 发表于 2年前  | 评论(0 )| 阅读次数(1035 )|   0 人收藏此文章,   我要收藏
安装:
    pcre :ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
    $tar zxvf pcre-8.35.tar.gz
    $cd pcre-8.35
    $./configure & make
    $make install

    nginx:
    $git clone  https://github.com/nginx/nginx
    $cd nginx
    $./configure & make
    $make install
     
    目前最新稳定版是1.6.0,最新版1.7.3,这里只是为了测试,就使用最新版,生成环境还是使用稳定版。默认情况下,nginx安装在/usr /local/nginx目录下,如果需要安装到其他目录,那么需要加编译选项即可,如./configure --prefix=/home/ngnix.
    测试是否安装成功:
    $/usr/local/nginx/sbin/nginx
    第一次运行,你可能会遇到这样的错误:/usr/local/nginx/sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory。
    $locate libpcre.so发现,是可以找到的,只是没有完全匹配的库名,既然这样就好办了,我们给加个软链接。
     
    这样就没什么问题了,还算比较顺利吧,接下来就看怎么使用了。

命令行选项:
    -v : show version and exit;
    -V : show version and configure options then exit;
           
    -t : test configuration and exit
        测试配置文件,跟nutcracker类似,nginx的默认配置文件在/usr/local/nginx/conf/nginx.conf;
        
        -t 后面不能指定参数,只能测试默认的配置文件。
    -q : suppress non-error messages during configuration testing
        这个选项无关紧要,只是在测试配置文件的时候,默认无错误的情况,那么不显示日志;
    -s signal : send signal to a master process: stop, quit, reopen, reload
        向nginx进程发送信号,比如 $/usr/local/nginx/sbin/nginx -s stop,向nginx发送stop信号,此方法可以用来停止nginx进程;
    -p prefix : set prefix path (default: /usr/local/nginx/)
    -c filename : set configuration file (default: conf/nginx.conf)
        指定启动配置文件,没有指定则使用默认的/usr/local/nginx/conf/nginx.conf

配置文件选项:
    user lee lee;
        定义nginx进程的用户和用户组;
         
    worker_processes 2;
        nginx进程数量,建议设置为CPU总核数;
         
        上图为设worker_processes =2 的nginx进程信息;
    error_log logs/error.log info;
        全局错误日志类型[debug |info|notice|warn|error|crit];
    pid logs/nginx.pid;
        进程文件
    worker_connections 1024;
        并发连接的最大数,这个与ulimit -n的值有关,建议与之一致;如果并发量大,则修改对应值;
    其他选项参考: nginx配置文件详解

    使用案例:
    (1)    
    nginx.conf:

点击(此处)折叠或打开


    #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;
        sendfile on;
        #tcp_nopush on;
        #keepalive_timeout 0;
        keepalive_timeout 65;
        #gzip on;
        server {
            listen 80;
            server_name localhost;
            #charset koi8-r;
            #access_log logs/host.access.log main;
            location / {
                root html;
                index index.html index.htm;
            }
            #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 ssl;
        # server_name localhost;
        # ssl_certificate cert.pem;
        # ssl_certificate_key cert.key;
        # ssl_session_cache shared:SSL:1m;
        # ssl_session_timeout 5m;
        # ssl_ciphers HIGH:!aNULL:!MD5;
        # ssl_prefer_server_ciphers on;
        # location / {
        # root html;
        # index index.html index.htm;
        # }
        #}
        include my.conf;
    } 




    my.conf

点击(此处)折叠或打开


    server {
            listen 20100;
            server_name 192.168.22.61;
            
            access_log off;
            location = / {
                proxy_pass http://192.168.22.61:20001;
            }
            location = /login {
                proxy_pass http://192.168.1.71:20001;
            }
            location = /config2 {
                proxy_pass http://192.168.1.72:20001;
            }
            location = /logout {
                proxy_pass http://192.168.1.73:20001;
            }
        } 




    
    比较文件发现,nginx.conf与默认的配置,只是加了一行代码。
    $/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    通过 http://192.168.22.61:20100访问页面,然后根据my.conf的配置进行分发到到各服务器,以达到分流的目的。
    下面分别是几个服务器的输出:
    61
    
    71
    
    72
    
    73
    
    
    (2)    
    下面作为简单的负载均衡,根据配置文件中的权重,分配到指定的服务器上。
    example.conf:

点击(此处)折叠或打开


    user nobody; ## Default: nobody
    worker_processes 4; ## Default: 1
    error_log logs/error.log;
    pid logs/nginx.pid;
    worker_rlimit_nofile 8192;
     
    events {
      worker_connections 4096; ## Default: 1024
    }
     
    http {
      upstream myproject {
        server 192.168.22.61:20001 weight=3;
        server 192.168.1.71:20001 weight=4;
        server 192.168.1.72:20001 weight=5;
        server 192.168.1.73:20001 weight=6;
      }
     
      server {
        listen 20100;
        server_name 192.168.22.61;
        location / {
          proxy_pass http://myproject;
        }
      }
    } 




    $/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/example.conf
    以下是某个web server的输出日志,测试只是针对于/login这个页面,比较片面,但是很容易从中看出是否起了作用。
    61
    
    71
    
    72
    
    73
    
    因为是初次接触,只是对nginx有初步的认识,深入还需在实际的生产环境中。
    
遇到的其他问题:
    (1)    非正常关闭nginx 导致的问题,nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
        使用kill -9 * 的方式关闭nginx,再次启动的时候会上面的错误。
        
        实际上端口还是被它占用的,再次kill 它即可。
        正常的方式是:
        $/usr/local/nginx/sbin/nginx -s stop
        
参考:
      nginx wiki
分享到:0
关注微信,跟着我们扩展技术视野。每天推送IT新技术文章,每周聚焦一门新技术。微信二维码如下:
微信公众账号:尚学堂(微信号:bjsxt-java)
声明:博客文章版权属于原创作者,受法律保护。如果侵犯了您的权利,请联系管理员,我们将及时删除!
(邮箱:webmaster#sxt.cn(#换为@))
北京总部地址:北京市海淀区西三旗桥东建材城西路85号神州科技园B座三层尚学堂 咨询电话:400-009-1906 010-56233821
Copyright 2007-2015 北京尚学堂科技有限公司 京ICP备13018289号-1 京公网安备11010802015183