Nginx学习(一)安装及基本功能

  • Nginx的安装

  1. 检查并且安装依赖组件

检查安装nginx的依赖性,nginx的模块需要第三方库的支持,编译的时候需要开发库(gcc,gcc-c++)检查是否安装下列库:zlib、zlib-devel、openssl、openssl-devel、prce-devel如果没有,则全部装上

[root@kaibin ~]# yum -y install zlib zlib-devel openssl openssl-devel pcre-devel gcc gcc-c++

2.安装pcre(支持正则表达式及地址重写功能)

[root@kaibin ~]# wget http://softlayer-sng.dl.sourceforge.net/project/pcre/pcre/8.36/pcre-8.36.tar.gz
[root@kaibin src]# tar zxvf pcre-8.36.tar.gz 
[root@kaibin pcre-8.36]# ./configure
[root@kaibin pcre-8.36]# make && make install

3.编译安装nginx

[root@kaibin src]# useradd -s /sbin/nologin nginx
[root@kaibin src]# wget http://nginx.org/download/nginx-1.6.2.tar.gz
[root@kaibin src]# tar zxvf nginx-1.6.2.tar.gz 
[root@kaibin nginx-1.6.2]# ./configure --prefix=/usr/local/nginx-1.6.2 --user=nginx --group=nginx \
> --with-http_stub_status_module \
> --with-http_sub_module \
> --with-http_ssl_module \
> --with-pcre=/usr/local/src/pcre-8.36 \
> --with-http_gzip_static_module
[root@kaibin nginx-1.6.2]# make && make install
  • Nginx的信号控制

  1. Master进程可以处理的信号

wKioL1TU7qnS3VNHAAHmVF7f5yo395.jpg

[root@kaibin sbin]# ps -ef | grep nginx | grep -v "grep"
root     12154     1  0 18:50 ?        00:00:00 nginx: master process ./nginx
nginx    12159 12154  0 18:50 ?        00:00:00 nginx: worker process
[root@kaibin sbin]# kill -WINCH 12154
[root@kaibin sbin]# ps -ef | grep nginx | grep -v "grep"
root     12154     1  0 18:50 ?        00:00:00 nginx: master process ./nginx

[root@kaibin sbin]# ps -ef | grep nginx | grep -v "grep"
root     12206     1  0 19:01 ?        00:00:00 nginx: master process ./nginx
nginx    12207 12206  0 19:01 ?        00:00:00 nginx: worker process
[root@kaibin sbin]# kill -QUIT 12206
[root@kaibin sbin]# ps -ef | grep nginx | grep -v "grep"

[root@kaibin sbin]# ps -ef | grep nginx | grep -v "grep"
root     12217     1  0 19:02 ?        00:00:00 nginx: master process ./nginx
nginx    12218 12217  0 19:02 ?        00:00:00 nginx: worker process
[root@kaibin sbin]# kill -HUP 12217
[root@kaibin sbin]# ps -ef | grep nginx | grep -v "grep"
root     12217     1  0 19:02 ?        00:00:00 nginx: master process ./nginx
nginx    12222 12217  0 19:03 ?        00:00:00 nginx: worker process

2. Worker可以处理的进程

wKioL1TU8Q3z8JqQAADxo7UCtyc037.jpg

3. 平滑重启nginx
修改了nginx的配置文件要重启nginx;重启之前要检查配置文件是否正确:

# /usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
configuration file /usr/local/nginx/conf/nginx.conf test is successful
# kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
  • 基本配置

1.nginx基础配置

#全局配置
user nginx;                             # 指定运行nginx的用户和组
worker_processes 2;                     # 工作进程数,基本为CPU的核心数或者两倍
# 指定全局错误日志的路径,错误日志可选项 有[debug|info|notice|warn|error|crit]
error_log logs/error.log info;
pid logs/nginx.pid;                     # 指定pid文件位置
events {
worker_connections 1024;                # 最大连接数
}
http {
include mime.types;                     # 设定mime类型
default_type application/octet-stream;
//定义日志格式
#log_format main ‘$remote_addr �C $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;                             # sendfile有效提高web文件传输速度
#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;
//定义主目录,类似apache的DocumentRoot
location / {
root /nginx_www;                         # 网站根目录
index index.html index.htm;              # 默认首页
}
error_page 404 /404.html;                # 404错误页面
error_page 500 502 503 504 /50x.html;    # 将500错误转到50x.html上
location = /50x.html {                   # 如果访问的页面等于50x.html,则从html目录下找
root /nginx_www;
}
}
}

2.NGINX配置文件过期时间expires

# 参数off禁止修改应答头中的”Expires”和”Cache-Control”。
# 注意:expires仅仅适用于200, 204, 301, 302,和304应答


    • 根据文件类型配置(大部分情况下是这么配置的)对图片,flash文件在浏览器本地缓存30天

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
对js,css文件在浏览器本地缓存1小时
location ~ .*\.(js|css)$
{
expires 1h;
}

    • 根据目录来设置

location ~ ^/(image|js|static|flash)/{
root /nginx_www/down;             # 匹配这些url主目录都在down下,并且过期时间为30
expires 30d;
}

3.使用break,NGINX配置禁止访问某类文件

location ~ .*\.(exe|doc|rar)$
{
if (-f $request_filename)         # 注意if和(之间有个空格
{
root /nginx/x;                    #当名字匹配时,把网站根目录替换成其他目录,使得用户无法下载
break;                            # 当名字匹配时,直接跳出不处理
}
}

4.使用deny

location ~ .*\.(exe|doc|rar)$
{
root /nginx/x;     #当名字匹配时,把网站根目录替换成其他目录,使得用户无法下载
deny all;
}
禁止访问某个目录
location ~ ^/(admin)/ {
deny all;           # 所有访问/admin目录的URL都被拒绝掉
}
限制某些ip访问
location / {
deny 192.168.1.1;
deny 192.168.2.0/24;
allow all;           # 上面呢两个被拒绝,允许其他所有的ip
}

5.nginx下载连接数限制、速度限制


    • limit_zone

语法:limit_zone zone_name $variable memory_max_size
默认值:no
使用字段:http
指令描述会话状态存储区域。
会话的数目按照指定的变量来决定,它依赖于使用的变量大小和memory_max_size的值。
如下例:

limit_zone one $binary_remote_addr 10m;

客户端的地址将用于会话,注意$binary_remote_addr变量将替换$remote_addr而被使用。
$remote_addr 变量的值的长度可以是7到15字节,因此大小指定为32或64字节。
$binary_remote_addr 变量的值的长度总是4字节,大小总是32字节。
当会话状态储存区域为1M时理论上可以处理32000个会话,每个会话大小为32字节


    • limit_conn

语法:limit_conn zone_name max_clients_per_ip
默认值:no
使用字段:http, server, location
指令指定一个会话的最大同时连接数,超过这个数字的请求将被返回”Service unavailable” (503)代码。
如下例:

limit_zone one $binary_remote_addr 10m;   # 使用10MB来存储会话,可存32w个会话
Server{
Listen 80;
Server_name download.ttlsa.com;
Index index.html index.html index.php;
#Zone limit
Location / {
limit_conn one 1;                         # 值允许一个连接
limit_rate 20k;                           # 一个连接最大20k速度
}
}

接下来我们测试一下效果,我在web1.ttlsa.com根目录下传了一个飞信的安装包,20多MB,看看速度是多少吧,接近20KB/秒.
这次把速度开到50KB,连接数还是1,配置段如下
limit_conn one 1;
limit_rate 50k;
连接数改成10,速率到50KB,速度应该达到250KB/秒左右了吧
limit_conn one 10;
limit_rate 50k;

6. Nginx列出目录下的列表-目录索引

整个站点
location / {
root /nginx/web1.ttlsa.com
autoindex on;
}
也可以单个目录
location / {
root /nginx/web1.ttlsa.com/list;  # 要索引的目录
autoindex on;                     # 打开索引
}

接下来看看整个列子,把web1.ttlsa.com的list索引目录列出,配置如下

server{
listen 80;
server_name web1.ttlsa.com;
location / {
root /nginx_www/web1.ttlsa.com;
index index.html index.htm;
}
error_page 404 /404.html;
location /list
{
root /nginx_www/web1.ttlsa.com;
autoindex on;
默认关闭状态
autoindex_exact_size off;
默认为on,显示出文件的确切大小,单位是bytes。
改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
autoindex_localtime on;
默认为off,显示的文件时间为GMT时间。
改为on后,显示的文件时间为文件的服务器时间
}
}

7. NGINX日志处理,

NGINX忽略部分日志

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
access_log off; # 列出的这些图片格式不记录日志
}

8.NGINX反向代理配置

nginx.conf配置文件:

#全局配置
user nobody nobody;
worker_processes 4;
error_log logs/error.log crit;
pid logs/nginx.pid;
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 65535;
}
http {
server_tokens off;
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 128;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
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;
#upstream配置
upstream mysrv {
server 192.168.1.1:80 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.2:80 weight=1 max_fails=2 fail_timeout=30s;
                }
upstream bench {
server 192.168.1.3:80 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.4:80 weight=1 max_fails=2 fail_timeout=30s;
               }
upstream bbs {
server 192.168.1.5:80 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.6:80 weight=1 max_fails=2 fail_timeout=30s;
               }
include vhost/*.conf;
}

#站点配置
#aaa_example_com.conf配置文件:
server
{
listen 80;
server_name aaa.example.com;
index index.php index.html index.htm index.shtml;
log_format proxy ‘$remote_addr| $upstream_addr| $connection| $upstream_status| $time_local| $request|’
‘$status| $body_bytes_sent| $bytes_sent| $http_referer|’
‘ $http_user_agent| $upstream_response_time| $msec| $request_time';
access_log logs/aaa_access.log proxy;
location /
{
proxy_pass http://mysrv;     # 当访问aaa.example.com,默认解析转发到后端的mysrv
include proxy.conf;
}
location /bench/
{
proxy_pass http://bench;     #当访问/bench/转发到upstream配置的bench下
include proxy.conf;
}
}

bbs_example_com.conf配置文件:
server
{
listen 80;
server_name bbs.example.com *.bbs.example.com;
log_format proxy ‘$remote_addr| $upstream_addr| $connection| $upstream_status| $time_local| $request|’
‘ $status| $body_bytes_sent| $bytes_sent| $http_referer|’
‘ $http_user_agent| $upstream_response_time| $msec| $request_time';
access_log logs/bbs_access.log proxy;
location /
{
proxy_pass http://bbs;
include proxy.conf;
}
}
#proxy.conf配置文件:
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 50m;         # 允许客户端请求的最大单个文件字节数
client_body_buffer_size 256k;     # 缓冲区代理缓冲客户端请求的最大字节数
proxy_connect_timeout 30;         # 连接后端服务器超时时间
proxy_send_timeout 30;            # 后端服务器发送数据超时时间,连接以及建立
proxy_read_timeout 60;            # 后端服务器响应请求超时时间,从开始发送到接受完毕
proxy_buffer_size 4k;             # 代理请求缓存区大小
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;      #系统繁忙时可申请的proxy_buffers大小
proxy_temp_file_write_size 64k;   #proxy缓存临时文件的大小
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
# 故障转移
proxy_max_temp_file_size 128m;
proxy_set_header指令用于在向反向代理的后端web服务器发起请求时添加指定Header头信息,当后端web服务器上有多个基于域名的
虚拟主机时,要通过添加Header头信息Host,来指定请求的域名,这样后端web服务器才能识别该反向代理访问请求由哪个虚拟主机来处理。

9.Nginx缓存服务器配置

# wget http://labs.frickle.com/files/ngx_cache_purge-1.3.tar.gz //清缓存模块
# tar zxvpf ngx_cache_purge-1.3.tar.gz -C ../software/
# cd /usr/local/src/software/nginx-1.0.2
# ./configure �Cuser=nobody �Cgroup=nobody �Cprefix=/usr/local/nginx-1.0.2 
�Cwith-http_stub_status_module �Cwith-http_ssl_module 
�Cadd-module=../ngx_cache_purge-1.3
# mkdir -p /www/nginx/proxy_temp_path
# mkdir -p /www/nginx/proxy_cache_path

nginx.conf配置文件:

user nobody nobody;
worker_processes 4;
error_log logs/error.log crit;
pid logs/nginx.pid;
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 65535;
}
http {
server_tokens off;
include mime.types;
default_type application/octet-stream;
server_names_hash_bucket_size 128;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
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;
upstream mysrv {
server 192.168.1.1:80 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.1.2:80 weight=1 max_fails=2 fail_timeout=30s;
}
include vhost/*.conf;
}

#aaa_example_com.conf配置文件:
server {
listen 80;
server_name aaa.example.com;
index index.php index.html index.htm index.shtml;
log_format proxy ‘$remote_addr| $upstream_addr| $connection| $upstream_status| $time_local| $request|’
‘ $status| $body_bytes_sent| $bytes_sent| $http_referer|’
‘ $http_user_agent| $upstream_response_time| $msec| $request_time';
access_log logs/aaa_access.log proxy;
location /
{
proxy_pass http://mysrv;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
location ~ /purge(/.*)
{
allow 127.0.0.1;
allow 192.168.1.0/24;
deny all;
proxy_cache_purge cache_one $host$1$is_args$args;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
{
proxy_pass http://mysrv;
include proxy.conf;
}
}

#proxy.conf配置文件:
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 50m; //允许客户端请求的最大单个文件字节数
client_body_buffer_size 256k; //缓冲区代理缓冲客户端请求的最大字节数
proxy_connect_timeout 30; //连接后端服务器超时时间
proxy_send_timeout 30; //后端服务器发送数据超时时间
proxy_read_timeout 60; //后端服务器响应请求超时时间
proxy_buffer_size 4k; //代理请求缓存区大小
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k; //系统繁忙时可申请的proxy_buffers大小
proxy_temp_file_write_size 64k; //proxy缓存临时文件的大小
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
//故障转移
proxy_max_temp_file_size 128m;
proxy_temp_path /www/nginx/proxy_temp_path;
proxy_cache_path /www/nginx/proxy_cache_path levels=1:2 
keys_zone=cache_one:200m inactive=1d max_size=1g; 
//设置web缓存区名称为cache_one,内存缓存空间为200m,自动清除超过1天没有被访问的缓存数据,硬盘缓存空间为1g
proxy_cache cache_one; //使用web缓存区cache_one
proxy_cache_valid 200 304 12h;
proxy_cache_valid 301 302 1m;
proxy_cache_valid any 1m;
proxy_cache_key $host$uri$is_args$args; //设置web缓存的key值,nginx根据key值md5哈希存储缓存

你可能感兴趣的:(开发,第三方,依赖性)