yanglgzh 发表于 2018-11-14 12:53:28

nginx服务器及优化

  nginx服务器
  作用:是一个高性能的HTTP和反向代理服务器,同时也是一个
  IMAP/POP3/SMTP代理服务器。
  Nginx配置文件及目录:
  /usr/local/nginx    安装目录
  -conf/nginx.conf    主配置文件
  -html               网页目录
  -logs               日志文件
  -sbin/nginx         启动脚本
  /usr/local/nginx/sbin/nginx –v查看Nginx版本
  /usr/local/nginx/sbin/nginx –V查看编译参数
  /usr/local/nginx/sbin/nginx –t测试默认配置文件
  /usr/local/nginx/sbin/nginx –cconf/nginx.conf 指定配置文件
  查看服务相关进程及端口信息
  psaux |grepnginx
  netstat -lnatpu |grep nginx
  步骤一:构建Nginx服务器
  1)使用源码包安装nginx软件包
  yum –y install gcc pcre-devel(支持正则) openssl-devel (支持加密网站)       //安装常见依赖包
  useradd –s /sbin/nologin nginx               创建nginx用户
  tar-xf   nginx-1.8.0.tar.gz
  cdnginx-1.8.0
  ./configure   \
  --prefix=/usr/local/nginx   \          //指定安装路径
  --user=nginx   \                     //指定用户
  --group=nginx\                      //指定组
  --with-http_ssl_module                //开启SSL加密功能
  make && make install    //编译并安装
  2)nginx命令的用法
  /usr/local/nginx/sbin/nginx                  //启动服务
  /usr/local/nginx/sbin/nginx -s stop            //关闭服务

  /usr/local/nginx/sbin/nginx -s>  /usr/local/nginx/sbin/nginx –V                //查看软件信息
  nginx服务默认通过TCP 80端口监听客户端请求:
  netstat-anptu|grep nginx
  3)为Nginx Web服务器建立测试首页文件
  Nginx Web服务默认首页文档存储目录为/usr/local/nginx/html/,在此目录下建立一个名为index.html的文件:
  touch/usr/local/nginx/html/index.html
  步骤二:升级Nginx服务器
  1)编译新版本nginx软件
  tar-zxvf   nginx-1.9.0.tar.gz
  cd nginx-1.9.0
  ./configure   \
  --prefix=/usr/local/nginx   \          //指定安装路径
  --user=nginx   \                     //指定用户
  --group=nginx\                      //指定组
  --with-http_ssl_module                //开启SSL加密功能
  make
  2) 备份老的nginx主程序,并使用编译好的新版本nginx替换老版本
  mv /usr/local/nginx/sbin/nginx >/usr/local/nginx/sbin/nginxold
  cp objs/nginx/usr/local/nginx/sbin/    //拷贝新版本
  make upgrade                           //升级
  /usr/local/nginx/sbin/nginx –v                //查看版本
  步骤三:客户端访问测试
  1)分别使用浏览器和命令行工具curl测试服务器页面
  firefox http://192.168.4.5
  curl http://192.168.4.5
  用户认证
  访问Web页面需要进行用户认证
  用户名为:tom,密码为:123456
  通过Nginx实现Web页面的认证,需要修改Nginx配置文件,在配置文件中添加auth语句实现用户认证。最后使用htpasswd命令创建用户及密码即可。
  步骤一:修改Nginx配置文件
  1)修改/usr/local/nginx/conf/nginx.conf
  vim /usr/local/nginx/conf/nginx.conf
  .. ..
  server {
  listen       80;
  server_namelocalhost;
  auth_basic "Input Password:";   认证提示符
  auth_basic_user_file "/usr/local/nginx/pass";    认证密码文件
  location / {
  root   html;
  indexindex.html index.htm;
  }
  }
  2)生成密码文件,创建用户及密码
  使用htpasswd命令创建账户文件,需要确保系统中已经安装了httpd-tools。
  yum -y installhttpd-tools
  htpasswd -cm /usr/local/nginx/pass   tom    创建密码文件
  New password: 123456
  Re-type new password: 123456
  htpasswd -m /usr/local/nginx/pass   jerry   追加用户,不使用-c选项
  3)重启Nginx服务

  usr/local/nginx/sbin/nginx –s>  请先确保nginx是启动状态才可以执行命令成功,否则报错
  步骤二:客户端测试
  1)登录192.168.4.100客户端主机进行测试
  firefox http://192.168.4.5               //输入密码后可以访问
  

基于域名的虚拟主机  

  实现两个基于域名的虚拟主机,域名分别为www.aa.com和www.bb.com
  对域名为www.aa.com的站点进行用户认证,用户名称为tom,密码为123456
  修改Nginx配置文件,添加server容器实现虚拟主机功能;对于需要进行用户认证的虚拟主机添加auth认证语句。
  步骤一:修改配置文件
  1)修改Nginx服务配置,添加相关虚拟主机配置如下
  vim /usr/local/nginx/conf/nginx.conf
  .. ..
  server {                         定义虚拟主机
  listen       80;                  端口
  server_namewww.aa.com;            域名
  auth_basic "Input Password:";            认证提示符
  auth_basic_user_file "/usr/local/nginx/pass";认证密码文件
  location / {                     发布目录
  root   html;          指定网站根路径
  indexindex.html index.htm;
  }
  }
  … …
  server {
  listen80;
  server_namewww.bb.com;
  location / {
  root   www;
  indexindex.html index.htm;
  }
  }
  2)创建账户及密码
  htpasswd –cm/usr/local/nginx/passtom   创建账户密码文件
  3)创建网站根目录及对应首页文件
  mkdir /usr/local/nginx/www
  echo "www" > /usr/local/nginx/www/index.html
  4)重启nginx服务

  /usr/local/nginx/sbin/nginx –s>  步骤二:客户端测试
  1)修改客户端主机192.168.4.100的/etc/hosts文件,进行域名解析
  vim /etc/hosts
  192.168.4.5    www.aa.com www.bb.com
  2)登录192.168.4.100客户端主机进行测试
  firefox http://www.aa.com         输入密码后可以访问
  firefox http://www.bb.com         直接访问
  SSL虚拟主机
  域名为www.cc.com
  该站点通过https访问
  通过私钥、证书对该站点所有数据加密
  源码安装Nginx时必须使用--with-http_ssl_module参数,启用加密模块,对于需要进行SSL加密处理的站点添加ssl相关指令(设置网站需要的私钥和证书)。
  步骤一:配置SSL虚拟主机
  1)生成私钥与证书
  cd /usr/local/nginx/conf
  openssl genrsa > cert.key               生成私钥
  openssl req -new -x509 -key cert.key > cert.pem生成证书
  2)修改Nginx配置文件,设置加密网站的虚拟主机
  vim/usr/local/nginx/conf/nginx.conf
  … …
  server {                           定义虚拟主机
  listen       443 ssl;      开启SSL
  server_namewww.cc.com;
  ssl_certificate      cert.pem;   指定证书文件
  ssl_certificate_keycert.key;    指定私钥文件
  ssl_session_cache    shared:SSL:1m;
  ssl_session_timeout5m;
  ssl_ciphersHIGH:!aNULL:!MD5;
  ssl_prefer_server_cipherson;
  location / {
  root   html;
  indexindex.html index.htm;
  }
  }
  步骤二:客户端验证
  1)修改客户端主机192.168.4.100的/etc/hosts文件,进行域名解析
  vim /etc/hosts
  192.168.4.5    www.cc.comwww.aa.com   www.bb.com
  2)登录192.168.4.100客户端主机进行测试
  firefox https://www.cc.com            //信任证书后可以访问
  Nginx反向代理
  轮询(默认):逐一循环调度
  Weight:指定循环几率,权重值和访问比率成正比
  ip_hash:根据客户端ip分配固定的后端服务器
  down:表示当前server暂停不参与负载
  max_fails:允许请求失败的次数(默认为1)
  fail_timeout:max_fails次失败后,暂停提供服务的时间
  backup:备份服务器
  后端做2台web服务器
  Nginx采用轮询的方式调用后端Web服务器
  两台Web服务器的权重要求设置为不同的值
  最大失败次数为1,失败超时时间为30秒
  例:使用4台RHEL7虚拟机,其中一台作为Nginx代理服务器,该服务器需要配置两块网卡,IP地址分别为192.168.4.5和192.168.2.5,两台Web服务器IP地址分别为192.168.2.100和192.168.2.200。客户端测试主机IP地址为192.168.4.100
  步骤一:部署实施后端Web服务器
  1)部署后端Web1服务器
  后端Web服务器可以简单使用yum方式安装httpd实现Web服务,为了可以看出后端服务器的不同,可以将两台后端服务器的首页文档内容设置为不同的内容。
  yum-yinstallhttpd
  echo "192.168.2.100" > /var/www/html/index.html
  systemctl restart httpd
  2)部署后端Web2服务器
  yum-yinstallhttpd
  echo "192.168.2.200" > /var/www/html/index.html
  systemctl restart httpd
  步骤二:配置Nginx服务器,添加服务器池,实现反向代理功能
  1)修改/usr/local/nginx/conf/nginx.conf配置文件
  vim /usr/local/nginx/conf/nginx.conf
  .. ..
  http {
  .. ..
  upstream webserver {       定义员服务器组
  server 192.168.2.100 weight=1 max_fails=2 fail_timeout=10;
  server 192.168.2.200 weight=2 max_fails=2 fail_timeout=10;
  }
  .. ..
  server {
  listen      80;
  server_namewww.tarena.com;
  location / {
  proxy_pass http://webserver;调用服务组
  }
  }
  2)重启nginx服务

  /usr/local/nginx/sbin/nginx –s>  3)使用浏览器访问代理服务器测试轮询效果
  curl http://192.168.4.5            //使用该命令多次访问查看效果
  步骤二:配置upstream服务器集群池属性
  1)设置失败次数,超时时间,权重
  vim /usr/local/nginx/conf/nginx.conf
  .. ..
  http {
  .. ..
  upstream webserver {
  server 192.168.2.100 weight=1 max_fails=2 fail_timeout=10;
  server 192.168.2.200 weight=2 max_fails=2 fail_timeout=10;
  }
  .. ..
  server {
  listen      80;
  server_namewww.tarena.com;
  location / {
  proxy_pass http://webserver;
  }
  }
  2)重启nginx服务

  /usr/local/nginx/sbin/nginx –s>  3)使用浏览器访问代理服务器测试轮询效果
  curl http://192.168.4.5            //使用该命令多次访问查看效果
  4)设置相同客户端访问相同Web服务器
  vim /usr/local/nginx/conf/nginx.conf
  .. ..
  http {
  .. ..
  upstream webserver {
  ip_hash;
  server 192.168.2.100 weight=1 max_fails=2 fail_timeout=10;
  server 192.168.2.200 weight=2 max_fails=2 fail_timeout=10;
  }
  .. ..
  server {
  listen      80;
  server_namewww.tarena.com;
  location / {
  proxy_pass http://webserver;
  }
  }
  5)重启nginx服务

  /usr/local/nginx/sbin/nginx –s>  6)使用浏览器访问代理服务器测试轮询效果
  curl http://192.168.4.5      使用该命令多次访问查看效果
  Nginx优化主要从配置文件着手,常见优化参数如下:
  worker_processes    与CPU核心数量一致
  error_log         定义日志级别
  worker_connections每个worker最大并发连接数
  server_tokens      服务器版本号信息
  client_header_buffer_size 默认请求包头信息的缓存
  large_client_header_buffers 大请求包头部信息的缓存个数与容量
  error_page 404       自定义404错误页面
  步骤一:构建Nginx服务器
  1)源码安装Nginx软件
  yum -y install gcc pcre-devel openssl-devel
  useradd -s /sbin/nologin nginx
  tar-zxvf   nginx-1.8.0.tar.gz
  cdnginx-1.8.0
  ./configure   \
  --prefix=/usr/local/nginx   \       指定安装路径
  --user=nginx   \                  指定用户
  --group=nginx\                  指定组
  --with-http_ssl_module             开启SSL加密功能
  # make && make install   编译并安装
  2)启用Nginx服务并查看监听端口状态
  /usr/local/nginx/sbin/nginx
  netstat-anptu|grep nginx
  tcp      0      0 0.0.0.0:80      0.0.0.0:*      LISTEN      10441/nginx
  步骤二:优化前从客户机访问Nginx服务器测试
  1)使用ab高并发测试
  格式:ab -c并发数-n总请求数 URL
  ab –n 2000 –c 2000 http://192.168.4.5/
  Benchmarking 192.168.4.5 (be patient)
  socket: Too many open files (24)         提示打开文件数量过多
  2)使用脚本测试长头部请求是否能获得响应
  cat buffer.sh
  chmod +x buffer.sh
  ./ buffer.sh
  .. ..
  414 Request-URI Too Large提示头部信息过大
  3)客户端使用浏览器访问不存在的页面
  firefox http://192.168.4.5/tt.html      //访问不存在的页面
  步骤三:优化Nginx服务器
  1)修改Nginx配置文件
  vim /usr/local/nginx/conf/nginx.conf
  .. ..
  worker_processes2;         与CPU核心数量一致
  events {
  worker_connections 65535;       每个worker最大并发连接数
  use epoll;
  }
  http {
  open_file_cachemax=2000 inactive=20s;设置服务器最大缓存2000个文件句柄,关闭20秒内无请求
  open_file_cache_valid60s;文件句柄有效时间是60秒,60秒后过期
  open_file_cache_min_uses 5;访问次数超过5次才被缓存
  sendfile on;               提升Nginx读文件性能
  tcp_nodelayon;          关闭TCP缓存延迟发送数据
  keepalive_timeout 10;   保持连接的超时时间
  server_tokens off;                不显示nginx版本号信息
  client_header_buffer_size    1k;   默认请求包头信息的缓存
  large_client_header_buffers4 4k; 大请求包头部信息的缓存个数与容量
  gzip on;                   解压
  gzip_min_length 1000;      1000字节以上解压
  gzip_comp_level 4;
  gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
  server {
  listen       80;
  server_namewww.tarena.com;
  location / {
  root   html;
  indexindex.html index.htm;
  }
  location ~ .(jpg|jpeg|gif|png|css|js|ico|xml)$ {   ~匹配正则 不区分大小写
  expires      30d;          定义客户端缓存时间为30天
  }
  error_page   404/40x.html;自定义错误页面
  location = /40x.html {
  root   html;
  }
  }
  }
  2)修改Linux操作系统最大打开文件数
  通过修改/etc/security/limits.conf文件修改打开文件最大数量:
  vim /etc/security/limits.conf


[*]soft nofile   100000
[*]hard nofile   100000  ulimit –Hn 100000
  ulimit –Sn 100000

  3)提前生成404错误页面,供测试使用:
  vim/usr/local/nginx/html/40x.html
  ~~^^^Error^^^~
  防盗链语句
  location ~*.(gif/jpg/png/swf/flv)${
  valid_referersnoneblockedwww.baidu.com;
  if($invalid_referer) {
  rewrite ^/ http://www.baidu.com/40x.html;
  }
  }


页: [1]
查看完整版本: nginx服务器及优化