nginx初级使用

nginx简介及特性

1.)nginx是一个高性能的web服务器和反向代理服务器,也是一个邮件代理服务器。具有高并发,开销小的特性。性能稳定,采用异步I/O处理机制。配置简洁。

2.)nginx特性:

基本功能:

静态资源的web服务器,能缓存打开的文件描述符

反向代理服务器,缓存、负载均衡

支持FastCGI

模块化,非DSO机制,过滤器gzip,SSI和图像大小调整等

支持SSL


扩展功能:

基于名称和IP做虚拟主机

支持keepalive

支持平滑配置更新或程序版本升级

定制访问日志,支持使用日志缓存以提高性能

支持url rewrite

支持路径别名

支持基于IP及用户的认证

支持速率限制,并发限制等

1.)nginx编译安装

安装nginx准备工作

创建nginx userand group

#  useradd -r -s /sbin/nologin nginx

安装nginx sslproxy 需要的开发依赖包

# yum installopenssl-devel pcre-devel


解压nginx

tar xf nginx-1.6.1.tar.gz


编译安装

# ./configure--prefix=/usr/local/nginx                 #指定nginx安装目录
--sbin-path=/usr/sbin/nginx                            #指定nginx管理命令目录,也可以不知道而后连接到/usr/sbin下
--conf-path=/etc/nginx/nginx.conf                      #指定nginx主配置文件存放位置
--error-log-path=/var/log/nginx/error.log              #指定nginx错误日志存放位置
--http-log-path=/var/log/nginx/access.log              #指定nginx访问日志存放位置
--pid-path=/var/run/nginx/nginx.pid                    #指定nginx的PID存放位置
--lock-path=/var/lock/nginx.lock                       #指定nginx锁文件存放位置
--user=nginx                                           #指定nginx的启动用户
--group=nginx                                          #指定nginx的用户组
--with-http_ssl_module                                 #指定nginx支持ssl模块
--with-http_flv_module                                 #指定nginx流媒体模块
--with-http_stub_status_module                         #开启nginx的状态查看模块
--with-http_gzip_static_module                         #开启nginx压缩功能模块
--http-client-body-temp-path=/var/tmp/nginx/client     #指定客户端请求主体临时存放目录
--http-proxy-temp-path=/var/tmp/nginx/proxy            #指定客户端请求数据,而后端服务器先加载到nginx代理服务器的目录
--http-fastcgi-temp-path=/var/tmp/nginx/fastcgi        #指定客户端请求的CGI相关的缓存存放路径
--http-uwsgi-temp-path==/var/tmp/nginx/uwsgi           #指定客户端请求python开发相关页面的缓存路径
--http-scgi-temp-path=/var/tmp/nginx/scgi              #scgi,对cgi的扩展
--with-pcre                                            #指定代理模块

# make &&make install

注释:nginx是异步服务器,如果客户端上传一个数据,并且nginx作为代理服务器,需要先将客户端上次的数据保存到nginx的指定存放路径,等客户端上传完成后才交给后端服务器。如果客户端下载一个文件,也需要在后端服务器加载到前端nginx代理服务器后才响应给客户。也就是为什么要指定上面几个temp-path的原因。

2.)创建编译安装时指定/var/tmp/nginx这个目录

mkdir -pv/var/tmp/nginx/


3.)启动nginx,检查端口

# nginx

wKioL1QcaUvSZ3AtAAFiyY_Br1w541.jpg


4.)输入IP地址,访问测试页

wKiom1QcaYnxqn-WAAH0wO9DZZE510.jpg


5.)nginx编译安装的时候是没有提供启动控制脚本的

# /usr/sbin/nginx                                          #启动nginx
# kill `cat/var/run/nginx/nginx.pid`                       #停止nginx
# kill -HUP `cat/var/run/nginx/nginx.pid`                  #平滑重启nginx
# nginx -t -c/etc/nginx/nginx.conf                         #检查nginx配置文件


6.)提供Sys风格启动控制脚本,加入开机启动。脚本的提供是由rpm软件包安装生成的,需要修改一些参数就可以使用

# chkconfig --addnginx
# chkconfig nginxon
# chkconfig --listnginx
nginx             0:off  1:off  2:on   3:on   4:on   5:on   6:off


7.)正常情况下,nginx配置文件是没有语法高亮的,如果需要可以下载nginx.vim来修改

下载地址:http://www.vim.org/scripts/script.php?script_id=1886

# mkdir -pv.vim/syntax
mkdir: createddirectory `.vim'
mkdir: createddirectory `.vim/syntax'
# cp nginx.vim~/.vim/syntax/
# vim~/.vim/filetype.vim
auBufRead,BufNewFile /etc/nginx/* if &ft == '' | setfiletype nginx | endif

这次nginx.conf里面就是高亮显示的了。

wKiom1QcahKDS0xqAAFnJRi2-GE896.jpg


8.)nginx配置文件

全局配置段
 
events{ 
…
}
 
http{
…
}

################################################################
 
全局配置段默认设置。
user  nginx;                                  #nginx的启动用户
worker_processes  1;                          #worker的进程数,一般是CPU的物理核心数
#error_log  logs/error.log;                   # 错误日志
#error_log  logs/error.log  notice;           #日志级别
#error_log  logs/error.log  info;
 
pid        /var/run/nginx/nginx.pid;          # nginx进程的PID
worker_rlimit_nofile65535;                    # worker进程可打开的文件数                
worker_rlimit_sigpending                      # 设定每个用户能够发往worker进程信号队列的数量
#ssl_enginedevice;                            # 在存在ssl硬件加速器上的服务器,指定锁使用的ssl硬件加速设备
#timer_resolutiontime;                        # 每次内核事件调用返回时,都会使用gettimeofday()来更新nginx缓存时钟,time_resolution用于定义每隔多久才会更新一次缓存时钟。
worker_priority-10;                           # 指定worker进程的nice值,值越小调度就会越优先
daemon on;                                    # 是否开启nginx调试功能,默认为on,off后可以将所有信息输出到控制台。
master_process on;                            # 是否以master/worker模式运行nginx,默认为on,调试时可以设置off以方便追踪。


9.)nginx提供了可以绑定进程运行在指定CPU上,就是所谓的CPU亲缘性。这是属于nginx优化的一部分,尽可能的避免进行来回活动在其他的核心上

 

查看主机CPU的核心数

# cat /proc/cpuinfo| grep 'processor'
processor  : 0
processor  : 1
processor  : 2
processor  : 3


 在配置文件中绑定CPU。全局配置段

worker_cpu_affinity0001 0010 0100;


查看nginx绑定在哪个CPU上

# ps -eopid,args,psr | grep nginx
 1449 nginx: master process /usr/   0
 1450 nginx: worker process         0
 1451 nginx: worker process         1
 1452 nginx: worker process         2

 

可以看下我做的测试

下面是没绑定的时候nginx进程运行在哪个CPU上

wKioL1QcawmDZdqqAAH3dJipps0293.jpg


下面是我绑定CPU后的测试

wKiom1QcawHw5jUrAAJhiZm47sc646.jpg


10.)events配置段

events{
#accept_mutex on;                             # 是否打开nginx负载均衡锁,此锁能够让多个worker进程轮流序列化的与新的客户端连接。功能默认是打开的。
#lock_file /path/to/lock.file;                # lock文件
#accept_mutex_delay#ns;                       # 一个worker进程为取得accept锁的等待时长
multi_sccept on;                              # 是否允许一次性响应多个用户请求,默认为off。
woker_connections ;                           #每个worker最大并发响应最大请求数,如果为代理服务器,应该是worker_rlimit_nofile数值的2倍。
}
 
http{
…     
server {                                      # 定义一个虚拟主机,nginx支持使用基于域名IP的虚拟主机。
 
        listen       80;                      #nginx监听的端口
        server_name  localhost;               #定义主机名,可以跟多个主机名。当nginx收到一个请求后,会取出首部的server值,而后跟其他server_name进行比较
                                              #比较方式:
                                              #精确匹配:www.test.com
                                              #左侧通配符匹配:*.test.com
                                              #右侧通配符匹配:www.*
                                              #正则表达式匹配:~^.*\.test\.com$
       server_name_hash_bucket_size 64;       # 为了实现快速查找,nginx使用hash表来保存主机名
 
        #charset koi8-r;
 
        #access_log  logs/host.access.log  main;
                                              #location匹配设置,根据用户请求指定URI来匹配指定的location以进行匹配
                                              #= :精确匹配,如果匹配到,则退出匹配。
                                              #~ :正则表达式匹配模式,匹配时区分字符大小写
                                              #~*:正则表达式匹配模式,匹配时忽略大小写
                                              #^~: URI的前半部分匹配,禁止正则表达式
                                              
 
 
        location / {
        root   html;                          # 文件路径定义
                                              # root html : 设置web资源路径,用户指定请求的网页存放路径
            index  index.html index.htm;      # 定义默认页面
        }
 
        #error_page  404              /404.html; # 错误页面重定向
                                                 #try_file $uri paht2 : 自左向右读取path所指定路径,在第一次找到即停止并返回,如果path不存在,则返回最后一个uri
 
        # redirect server error pages to thestatic page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }…
}
定义基于IP的虚拟主机
    server {
        listen       80;
        server_name  192.168.122.135;
        location / {
            root   html/web1;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
 
    server {
        listen       80;
        server_name  192.168.122.136;
        location / {
            root   html/web2;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}



11.)创建网站跟目录

# mkdir /usr/local/nginx/html/{web1,web2}
# vim/usr/local/nginx/html/web1/index.html
# vim/usr/local/nginx/html/web2/index.html
# ifconfig eth1:0192.168.122.136/24
# ifconfig | grep'inet addr'
inetaddr:192.168.122.135 Bcast:192.168.122.255 Mask:255.255.255.0
inetaddr:192.168.122.136 Bcast:192.168.122.255 Mask:255.255.255.0

测试访问

wKioL1Qca9XRRTEpAADfhqKzkEs742.jpg

wKioL1Qca9WxQRz4AADffUAv2a4950.jpg

12.)location 匹配设置

server {
        listen       80;
        server_name  192.168.122.135;
        location / {
            root   html/web1;
            index index.html index.htm;
        }
        location ^~/images/ {
            root   html/web3;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}
 
# mkdir/usr/local/nginx/html/web3
# vim/usr/local/nginx/html/web3/index.html

wKiom1QcbEui5Zm8AADMm9QMNxk606.jpg

wKiom1QcbEvw_pxTAADkHEWYGXU673.jpg


# mkdir/usr/local/nginx/html/web3/images
# cp/usr/local/nginx/html/web3/index.html /usr/local/nginx/html/web3/images/

wKioL1QcbLayWnSAAADXtzQ3seU309.jpg


第一个输入192.168.133.135/images没有匹配到是因为在web3下没有images这个目录,而roothtml/web3下指明了是应该访问的html/web3/images下的内容


13.)目录文件别名

location^~/images/ {
     alias  html/web3;
     index index.html index.htm;
}

wKioL1QcbRXggMv3AADyaRiWapw161.jpg

# cp/usr/local/nginx/html/web3/images/index.html /usr/local/nginx/html/web3/

wKiom1QcbQ7S7n8LAADj5Mwajzg200.jpg

14.)错误页面重定向

    server {
        listen      80;
        server_name  192.168.122.135;
        error_page 404 /404.html;
#error_page 404 =200 /404.html;
…
}
# vim/usr/local/nginx/html/web1/404.html

wKioL1QcbZjQiWeOAADLVytauEU637.jpg

15.)页面不存在,定向到首页去

wKiom1QcbcnAeVMGAADFpFntoEo913.jpg

location /newweb {
        root   html/web3;
        try_files $uri /index.html;
  }
# mkdir /usr/local/nginx/html/web3/newweb

wKioL1QcbfbyYz8TAADfvfcROkk041.jpg

16.)访问控制,我的无线网络是172网段的,虚拟机是192网段的,就禁止172网段进行访问

server {
     listen       80;
     server_name  192.168.122.135;
     allow 172.16.0.0/16;
     deny all;
…
}

wKioL1Qcbj7ynNT7AADsTqtN5YY044.jpg

17.)性能监控模块status

server {
        location /status {
            stub_status on;
            access_log   off;
            allow all;
            #deny all;  
        }
}

wKiom1Qcbl2x6lYxAAD1RzhqAcQ485.jpg

18.)用户认证模块

server {
…
        location /status {
            stub_status on;
            access_log   off;
            auth_basic "nginxstatus";
            auth_basic_user_file/etc/nginx/.nginxpass;
        }
       …
}
# htpasswd -c -m/etc/nginx/.nginxpass admin

wKioL1Qcbq2AKd5YAAH1UCfQMxs689.jpg

19.)防盗链

server {  
location ~* \.(jpg|png|gif)$ {
            root html/web2;
            valid_referers none blockedwww.a.com *.a.com;
            if ($invalid_referer) {
                rewrite ^/http://www.a.com/403.html;
        }
}

上面的主机名已经不再是基于IP的虚拟主机,而是修改成了www.a.com

通过web1的主机访问测使用图片

wKiom1QcbwHQPsZgAADRU-FiMz0482.jpg

通过www.a.com使用图片

wKiom1QcbxezTIsIAADcroGpabk777.jpg

日志已经显示给重定向了

wKioL1Qcb2PgcoU9AAG5OPWy_fA946.jpg


20.)URL地址重写 rewrite

last: 一旦被当前规则匹配并重写后立即停止检查后续的其它rewrite的规则,而后通过重写后的规则重新发起请求
break: 一旦被当前规则匹配并重写后立即停止后续的其它rewrite的规则,而后继续由nginx进行后续操作
redirect: 返回302临时重定向
permanent: 返回301永久重定向

# mkdir/usr/local/nginx/html/web2/{jpg,images}
# mv 123.jpg/usr/local/nginx/html/web2/images/
server{
    …
        location /jpg/ {
            root html/web2;
            rewrite ^/jpg/(.*\.(jpg|gif|png))$/images/$1 last;
        }
…
}

wKiom1Qcb6aygXJ6AADNC1Eqfcw528.jpg

正常的访问也是可以进行的

wKioL1Qcb9bjUdWbAAC9f9QRDmA991.jpg

总结:基本配置只是做出了一部分示例,还有很多功能和参数没有介绍,官方网站上也是有中文的nginx的文档

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章