设为首页 收藏本站
查看: 769|回复: 0

[经验分享] nginx服务器及优化

[复制链接]

尚未签到

发表于 2018-11-14 12:53:28 | 显示全部楼层 |阅读模式
  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 –c  conf/nginx.conf 指定配置文件
  查看服务相关进程及端口信息
  ps  aux |grep  nginx
  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
  cd  nginx-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_name  localhost;
  auth_basic "Input Password:";     认证提示符
  auth_basic_user_file "/usr/local/nginx/pass";    认证密码文件
  location / {
  root   html;
  index  index.html index.htm;
  }
  }
  2)生成密码文件,创建用户及密码
  使用htpasswd命令创建账户文件,需要确保系统中已经安装了httpd-tools。
  yum -y install  httpd-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_name  www.aa.com;            域名
  auth_basic "Input Password:";              认证提示符
  auth_basic_user_file "/usr/local/nginx/pass";  认证密码文件
  location / {                     发布目录
  root   html;          指定网站根路径
  index  index.html index.htm;
  }
  }
  … …
  server {
  listen  80;
  server_name  www.bb.com;
  location / {
  root   www;
  index  index.html index.htm;
  }
  }
  2)创建账户及密码
  htpasswd –cm  /usr/local/nginx/pass  tom     创建账户密码文件
  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_name  www.cc.com;
  ssl_certificate      cert.pem;   指定证书文件
  ssl_certificate_key  cert.key;    指定私钥文件
  ssl_session_cache    shared:SSL:1m;
  ssl_session_timeout  5m;
  ssl_ciphers  HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers  on;
  location / {
  root   html;
  index  index.html index.htm;
  }
  }
  步骤二:客户端验证
  1)修改客户端主机192.168.4.100的/etc/hosts文件,进行域名解析
  vim /etc/hosts
  192.168.4.5    www.cc.com  www.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  -y  install  httpd
  echo "192.168.2.100" > /var/www/html/index.html
  systemctl restart httpd
  2)部署后端Web2服务器
  yum  -y  install  httpd
  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_name  www.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_name  www.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_name  www.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
  cd  nginx-1.8.0
  ./configure   \
  --prefix=/usr/local/nginx   \       指定安装路径
  --user=nginx   \                    指定用户
  --group=nginx  \                    指定组
  --with-http_ssl_module             开启SSL加密功能
  [root@svr5 nginx-1.8.0]# 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_processes  2;           与CPU核心数量一致
  events {
  worker_connections 65535;       每个worker最大并发连接数
  use epoll;
  }
  http {
  open_file_cache  max=2000 inactive=20s;  设置服务器最大缓存2000个文件句柄,关闭20秒内无请求
  open_file_cache_valid  60s;  文件句柄有效时间是60秒,60秒后过期
  open_file_cache_min_uses 5;  访问次数超过5次才被缓存
  sendfile on;               提升Nginx读文件性能
  tcp_nodelay  on;          关闭TCP缓存延迟发送数据
  keepalive_timeout 10;     保持连接的超时时间
  server_tokens off;                不显示nginx版本号信息
  client_header_buffer_size    1k;   默认请求包头信息的缓存
  large_client_header_buffers  4 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_name  www.tarena.com;
  location / {
  root   html;
  index  index.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_referers  none  blocked  www.baidu.com;
  if($invalid_referer) {
  rewrite ^/ http://www.baidu.com/40x.html;
  }
  }



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-635026-1-1.html 上篇帖子: Nginx + Lua 下篇帖子: nginx 用户认证
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表