美文网首页
Nginx 源码安装和简单的配置

Nginx 源码安装和简单的配置

作者: esrever | 来源:发表于2017-01-05 11:34 被阅读2993次

    Nginx 源码安装和简单的配置

    Nginx是一款开放源代码的高性能HTTP服务器和反向代理服务器。Nginx以高性能、高可用、丰富的功能模块、简单明了的配置文档以及低资源占用而著称,采用罪行的网络I/O模型,支持高达50000个并发连接。

    写此篇笔记的时候,最新版是1.11.2 (http://nginx.org/download/nginx-1.11.2.tar.gz),nginx最新版下载链接见官网

    安装示例(这里安装在/usr/local/nginx中):

        wget http://nginx.org/download/nginx-1.11.2.tar.gz
        tar -xzvf nginx-1.11.2.tar.gz -C /usr/src
        # 安装依赖
        sudo apt-get install gcc libpcre3 libpcre3-dev openssl libssl-dev libssl0.9.8 perl libperl-dev
        cd /usr/src/nginx-1.11.2
        # 以下是一行。。用于生成makefile。如果需要添加第三方模块,使用--add-module=/path/module1的方法编译
        ./configure --prefix=/usr/local/nginx --with-ipv6 --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gzip_static_module --with-http_perl_module --with-mail --with-mail_ssl_module
        # make是生成在objs目录中,make install则安装到prefix所示的目录中
        make && make install
        # 没有错误出现的话,就可以进入nginx安装目录(/usr/local/nginx)配置。
    

    成功安装后,进入/usr/local/nginx,可以看到4个目录:

        root@iZ28xhlm5vhZ:/usr/local/nginx# ll
        total 44
        drwxr-xr-x 11 root   root 4096 Jul 26 10:06 ./
        drwxr-xr-x 12 root   root 4096 Jul 26 10:03 ../
        drwxr-xr-x  2 root   root 4096 Jul 26 10:11 conf/
        drwxr-xr-x  2 root   root 4096 Jul 26 10:03 html/
        drwxr-xr-x  2 root   root 4096 Jul 26 10:07 logs/
        drwxr-xr-x  2 root   root 4096 Jul 26 10:03 sbin/
    

    其中,

    1. conf:放置nginx相关的配置文件,最核心的是nginx.conf
    2. html:默认的网站根目录
    3. logs:日志文件目录(访问日志,错误日志,运行时的进程id cat logs/nginx.pid)
    4. sbin:主程序(nginx)目录

    一些常用的命令(可以写脚本简化管理):

        1、启动: /usr/local/nginx/sbin/nginx
        2、关闭: /usr/local/nginx/sbin/nginx -s stop
        3、重启: /usr/local/nginx/sbin/nginx -s reload
        4、指定(另外的)配置文件并启动(如果已经启动则报端口占用的错误): /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/new.conf
        5、查看pid: cat /usr/local/nginx/logs/nginx.pid,可以用于kill等操作
        6、查看安装时候的参数: /usr/local/nginx/sbin/nginx -V
    

    参考链接--如何在安装成功的nginx中添加未编译的安装模块(nginx添加模块需要重新编译nginx,而不是像Apache一样配置文件引用动态链接库):

    1. 下载一个第三方库用于测试,wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz,参考链接中是2.0的版本,在我的服务器make生成的时候报错了,于是改成了最新版的2.3
    2. 解压到主目录中,tar -xzvf ngx_cache_purge-2.3.tar.gz -C ~
    3. 进入nginx源码所在的目录,我的源码放在/usr/src/nginx中,cd /usr/src/nginx
    4. 查看当前的nginx安装使用了哪一些选项,用于重新编译,/usr/local/nginx/sbin/nginx -V,我的选项是 --prefix=/usr/local/nginx --with-ipv6 --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gzip_static_module --with-http_perl_module --with-mail --with-mail_ssl_module
    5. 在选项后添加需要添加的第三方模块选项,添加--add-module=/root/ngx_cache_purge-2.3,注意/root是我的主目录
    6. (重要的一步!)只需要make生成主程序而不安装(在此之前可以查看一下objs目录中的nginx文件的最后修改时间),make,保证没有报错(看到objs/nginx的最后修改时间已经变化)
    7. 替换启动文件,cp /usr/local/nginx/sbin;mv nginx nginx.bak;cp /usr/src/nginx-1.11.2/objs/nginx .
    8. 启动或重启nginx(命令略)

    编译选项参考

    配置文件解析

    参考链接1
    参考链接2

        # 当生成一些文件的时候,所属的用户和组
        user www-data;
        # 启动子进程(worker)数,可以通过`ps aux | grep nginx` 查看,一般设置成CPU核数。
        worker_processer 1;
        # 全局错误日志,这里的“当前目录”为/usr/local/nginx
        error_log logs/error.log; # 默认
        # 保存PID的log
        pid logs/nginx.pid; # 默认
        
        # 工作模式和连接数上限
        events{
            # epoll是多路复用IO中的一种方式,仅用于linux2.6以上的内核,可以大大提高nginx的性能
            use epoll;
            # 单个worker process进程的最大并发连接数,受系统文件句柄限制,即`ulimit -a`中open files项
            worker_connections 65535;
        }
        
        # 设定http服务器
        http{
            # 设定mime类型,mime.types为“文件类型定义”文件,“当前目录”为conf/
            include mime.types;
            # 默认文件类型
            default_type application/octet-stream;
            
            # 默认编码
            # charset utf-8;
        
            # 反向代理配置,可以打开proxy.conf看看
            # include proxy.conf;
        
            # fastcgi配置,可以打开fastcgi.conf看看
            # include fastcgi.conf; 
        
            # 定义log文件怎么写
            log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                              '$status $body_bytes_sent "$http_referer" '
                              '"$http_user_agent" "$http_x_forwarded_for"';
            # 全局访问日志,使用以上定义的main格式
            access_log logs/access.log main;
            # sendfile指令指定nginx是否调用sendfile函数[零拷贝方式](http://baike.baidu.com/view/704944.htm)来输出文件。这是一个提高通信效率但是降低数据传输速率的函数,只有在用来进行下载等应用磁盘IO重负载的应用中设置为off
            sendfile on;
            # 服务器的响应头部信息产生独立的数据包发送,即一个响应头信息=>一个包
            tcp_nopush on;
            # 保持连接的超时时间
            keepalive_timeout 65;
            # 页面压缩后传输更节省流量
            gzip on;
            # 防止网络阻塞
            tcp_nodelay on;
            # 服务器名字的hash表大小
            # server_names_hash_bucket_size 128;
            # 上传文件大小限制
            # client_header_buffer_size 32k;
            # 设定请求缓存
            # large_client_header_buffers 4 64k;
            # client_max_body_size 8m;
            
            # 开启限制IP连接数的时候需要使用
            # limit_zone crawler $binary_remote_addr 10m;
        
            # 包含每个server的配置
            # include /usr/local/nginx/myconf/*.conf;
            
            # server可以include进来,也可以直接写在后面,用于定义虚拟主机。最重要的是字段是server_name和root
            server{
                # 服务器监听端口
                listen 7890;
                # 访问域名
                server_name www.example.com
                # 编码格式,如果网页编码与此设置不同,则将被自动转码,覆盖全局的编码。。
                # charset koi8-r;
                # 设置虚拟主机的访问日志
                # access_log logs/www.example.com.access.log main;
                
                # 对URL进行匹配,访问server_name的时候进入这里
                location / {
                    # 网页根目录,“当前目录”在nginx的安装目录,即/usr/local/nginx,可以用绝对路径或相对路径,以下的html是相对安装目录
                    root html;
                    # 默认的首页文件(有先后顺序),访问www.example.com则寻找root下的index.html返回,如果找不到,就找index.htm
                    index index.html index.htm;
                }
                
                # 设置错误代码对应的错误页面
                # error_page 404 /404.html
                # error_page 500 502 503 504 /50x.html
                
                # 略去配置代理和HTTPS Server
            }
        }
    

    CGI
    FastCGI

    在Ubuntu上的简单的一个例子

    首先在默认的网站根目录下建立虚拟主机的目录和文件,然后修改conf/nginx.conf配置并重启nginx,由于不能用DNS域名解析来指向server_name,所以在/etc/hosts下添加本机DNS记录,然后用curl命令来模拟访问过程。

    建立目录和网页文件

        mkdir /usr/local/nginx/html/{domain,web,example,default}
        echo "domain.com" > /usr/local/nginx/html/domain/index.html
        echo "web.domain.com" > /usr/local/nginx/html/web/index.html
        echo "example.com" > /usr/local/nginx/html/example/index.html
        echo "default" > /usr/local/nginx/html/default/index.html
    

    nginx的配置

        # nginx.conf
        worker_processes  1;
        
        error_log  logs/error.log;
        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"';
        
        
            sendfile        on;
        
            keepalive_timeout  65;
        
            gzip  on;
        
            server {
                listen       7890;
                server_name  www.domain.com *.domain.com;
        
                access_log  logs/www.domain.com.access.log  main;
        
                location / {
                    root   html/domain;
                    index  index.html index.htm;
                }
        
                location ~ /\.ht {
                    deny  all;
                }
            }
        
            server {
                listen       7890;
                server_name  web.domain.com;
                location / {
                    root   html/web;
                    index  index.html index.htm;
                }
            }
        
            server {
                listen       7890;
                server_name  www.example.com;
                location / {
                    root   html/example;
                    index  index.html index.htm;
                }
            }
        
            server {
                listen       7890 default_server;
                location / {
                    root   html/default;
                    index  index.html index.htm;
                }
            }
        }
    

    重启nginx,/usr/local/nginx/sbin/nginx -s reload,然后在/etc/hosts添加以下测试记录

        # /etc/hosts
        # test nginx
        127.0.0.1 web.domain.com
        127.0.0.1 www.domain.com
        127.0.0.1 test.domain.com
        127.0.0.1 www.example.com
        127.0.0.1 hello.example.com
        127.0.0.1 world.example.com
    

    使用curl来测试:

        root@iZ28xhlm5vhZ:~# curl web.domain.com:7890
        web.domain.com
        root@iZ28xhlm5vhZ:~# curl www.domain.com:7890
        domain.com
        root@iZ28xhlm5vhZ:~# curl test.domain.com:7890
        domain.com
        root@iZ28xhlm5vhZ:~# curl www.example.com:7890
        example.com
        root@iZ28xhlm5vhZ:~# curl hello.example.com:7890
        default
        root@iZ28xhlm5vhZ:~# curl world.example.com:7890
        default
    

    相关文章

      网友评论

          本文标题:Nginx 源码安装和简单的配置

          本文链接:https://www.haomeiwen.com/subject/twfzvttx.html