美文网首页
nginx安装与配置

nginx安装与配置

作者: 大胡子歌歌 | 来源:发表于2018-09-27 16:31 被阅读0次
nginx的特点

支持高并发,并且资源消耗小
可以做http反向代理及负载均衡,内置对RS节点的健康检查功能,如有服务器宕机
具备squid等专业缓存软件的功能
支持异步网络IO事件模型epoll

nginx主要企业功能应用

作为web服务软件

  • 1运行静态网站
  • 2结合FastCGI运行PHP动态程序(使用fastcgi_pass方式)
  • 3结合Tomcat/resin 支持JAVA动态程序(使用proxy_pass方式)
    反向代理与负载均衡服务
    前端业务数据缓存服务
正向代理与反向代理
  1. 概念
      正向代理是一个位于客户端和目标服务器之间的代理服务器(中间服务器)。为了从原始服务器取得内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理向目标服务器转交并且将获得的内容返回给客户端。正向代理的情况下客户端必须要进行一些特别的设置才能使用。
      反向代理正好相反。对于客户端来说,反向代理就好像目标服务器。并且客户端不需要进行任何设置。客户端向反向代理发送请求,接着反向代理判断请求走向何处,并将请求转交给客户端,使得这些内容就好似他自己一样,一次客户端并不会感知到反向代理后面的服务,也因此不需要客户端做任何设置,只需要把反向代理服务器当成真正的服务器就好了。
  2. 区别
      正向代理需要你主动设置代理服务器ip或者域名进行访问,由设置的服务器ip或者域名去获取访问内容并返回;而反向代理不需要你做任何设置,直接访问服务器真实ip或者域名,但是服务器内部会自动根据访问内容进行跳转及内容返回,你不知道它最终访问的是哪些机器。
      正向代理是代理客户端,为客户端收发请求,使真实客户端对服务器不可见;而反向代理是代理服务器端,为服务器收发请求,使真实服务器对客户端不可见
安装nginx
  • 1 安装依赖
    yum install pcre pcre-devel gcc gcc-c++ openssl openssl-devel -y
  • 2 可切换国内镜像源
    mirrors.aliyun.com,选择相应的版点击help,复制后代码运行。 例:
mv /etc/yum.repos.d/CentOS-Base.repo \/etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum makecache
  • 3 创建用户及相关文件夹
useradd www -s /sbin/nologin -M
mkdir /home/tools 
wget https://nginx.org/download/nginx-1.8.1.tar.gz
tar xf nginx-1.8.1.tar.gz
cd nginx-1.8.1
./configure --user=www --group=www \
--with-http-stub_status_module \ #状态模块
--with-http_ssl_module \ #https
--prefix=/app/nginx-1.8.1 #安装目录
 make && make install 
ln -s /app/nginx-1.8.1. /app/nginx
  • 4 开启关闭查看命令
/app/nginx/sbin/nginx -V #查看版本信息
/app/nginx/sbin/nginx -t #测试配置文件
/app/nginx/sbin/nginx  #启动nginx
/app/nginx/sbin/nginx  -s stop #停止
/app/nginx/sbin/nginx  -s reload  #优雅重启
/app/nginx/conf/nginx.conf  #主配置文件
/app/nginx/logs/error.conf #错误日志  

netstat lntup |grep 80 #查看进程
killall nginx  杀掉所有nginx 进程

egrep -v "^$|#" nginx.conf.default >nginx.conf #清理配置文件中的注释和空行
  • 5 配置文件
worker_processes  1;  #进程数,一般等于cpu核数
events {
    worker_connections  1024;  #并发请求数
}
http {
    include       mime.types;  #媒体类型
    default_type  application/octet-stream;
    sendfile        on; 
    keepalive_timeout  65;
    include extra/*.conf;  #加载其它conf文件,以免主配置文件过于杂乱
    server {
        listen       80;   #监听端口
        server_name  localhost;  #域名,可添加多个别名(用于监控),用空格分开
        location / {
            root   html;  #网站目录
            index  index.html index.htm;  #首页文件
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
  • 6 虚拟主机
    基于域名和端口的虚拟主机,只需在nginx.conf的http块内添加多个server块,先找端口,再匹配$http_host
server {
        listen   80;     listen  81; #基于端口
        server_name  www.aaa.com;         www.bbb.com;  #基于域名
        location / {
            root   html;    #网站目录
            index  index.html index.htm;  #首页文件
        }
   }
  • 7 状态模块
    cat /app/nginx/extra/status.conf <<EOF
    server {
    listen 80;
    server_name status.aaa.com;
    location / {
    stub.status on;
    access_log off;
    }
    }
    EOF
  • 8 日志
error_log logs/error.log error;#日志类型  目录    级别
access_log logs/access.log main # 日志类型  目录   格式
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '            
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

日志切割
cd /app/nginx/logs
/bin/mv access.log access_${date +%F}.log
/app/nginx/sbin/nginx -s reload
crontab -e
59 23 * * * /tools/cut.sh

  • 9 location配置
    rewrite和location功能有点像,都能实现跳转,主要区别在于rewrite是在同一域名内更改获取资源的路径,而location是对一类路径做控制访问或反向代理,可以proxy_pass到其他机器。很多情况下rewrite也会写在location里

=开头表示精确匹配
如 A 中只匹配根目录结尾的请求,后面不能带任何字符串。
^~ 开头表示uri以某个常规字符串开头,不是正则匹配
~ 开头表示区分大小写的正则匹配;
~* 开头表示不区分大小写的正则匹配
/ 通用匹配, 如果没有其它匹配,任何请求都会匹配到

顺序优先级:
(location =) > (location 完整路径) > (location ^~ 路径) > (location ,* 正则顺序) > (location 部分起始路径) > (/)
实际使用案例

所以实际使用中,个人觉得至少有三个匹配规则定义,如下:
#直接匹配网站根,通过域名访问网站首页比较频繁,使用这个会加速处理,官网如是说。
#这里是直接转发给后端应用服务器了,也可以是一个静态首页
# 第一个必选规则
location = / {
    proxy_pass http://tomcat:8080/index
}
# 第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
# 有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ {
    root /webroot/static/;
}
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
    root /webroot/res/;
}
#第三个规则就是通用规则,用来转发动态请求到后端应用服务器
#非静态文件请求就默认是动态请求,自己根据实际把握
#毕竟目前的一些框架的流行,带.php,.jsp后缀的情况很少了
location / {
    proxy_pass http://tomcat:8080/
}
  • 10 rewrite功能
    rewrite功能就是,使用nginx提供的全局变量或自己设置的变量,结合正则表达式和标志位实现url重写以及重定向。rewrite只能放在server{},location{},if{}中,并且只能对域名后边的除去传递的参数外的字符串起作用。

常用正则
. : 匹配除换行符以外的任意字符
? : 重复0次或1次
+ : 重复1次或更多次
* : 重复0次或更多次
\d :匹配数字
^ : 匹配字符串的开始
$ : 匹配字符串的介绍
{n} : 重复n次
{n,} : 重复n次或更多次
[c] : 匹配单个字符c
[a-z] : 匹配a-z小写字母的任意一个
( ) :反向引用$1 $2

  • 11 rewrite 实例
要求:/images/bla_500x400.jpg  =>  /resizer/bla.jpg?width=500&height=400地址
rewrite ^/images/(.*)_(\d+)x(\d+)\.(png|jpg|gif)$ /resizer/$1.$4?width=$2&height=$3 last;

要求:/images/ef/uh7b3/test.png  =>  /data?file=test.png
rewrite '^/images/([a-z]{2})/([a-z0-9]{5})/(.*)\.(png|jpg|gif)$' /data?file=$3.$4;

要求:abc.domian.com/sort/2  =>  abc.domian.com/index.php?act=sort&name=abc&id=2 
if ($host ~* (.*)\.domain\.com) { 
    set $sub_name $1;
    rewrite ^/sort\/(\d+)\/?$ /index.php?act=sort&cid=$sub_name&id=$1 last; 
} 

要求:/123456/xxxx  =>  /xxxx?id=123456 
rewrite ^/(\d+)/(.+)/ /$2?id=$1 last; 

要求:设定nginx在用户使用ie的使用重定向到/nginx-ie目录
 if ($http_user_agent ~ MSIE) {
     rewrite ^(.*)$ /nginx-ie/$1 break; 
} 

要求:当用户访问任何内容时都跳转到www.aaa.com
rewrite ^/(.*) http://www.aaa.com/$1 permanent

要求:bbs.aaa.com => www.aaa.com/bbs/index
if  ( $http_host ~* "^(.*)\.aaa\.com$") {
      set $domain $1 ;
      rewrite ^(.*) http://www.aaa.com/$domain/index.html break ;
  }

要求:www.aaa.com/bbs/xxx.html  =>  bbs.aaa.com/xxx.html 
rewrite ^/bbs/(.*)  http://bbs.aaa.com/$1 break ;

相关文章

网友评论

      本文标题:nginx安装与配置

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