设为首页 收藏本站

运维网

查看: 169|回复: 0

[经验分享] FreeBSD安装配置Nginx和Nginx基本功能配置

[复制链接]

尚未签到

发表于 2018-11-9 09:59:00 | 显示全部楼层 |阅读模式
  作者:diege
  整理时间:2012-04-12
  一、        安装操作系统
  根据《FreeBSD标准安装配置》安装FreeBSD8.2
  二、        更新Port系统
  1、设置Port更新源
  SERVERNAME=portsnap.FreeBSD.org
  2、更新
  第一次更新
  #portsnap fetch extract
  而在以后只须要运行:
  portsnap fetch update
  三、        安装配置nginx
  1、安装
  # cd /usr/ports/www/nginx && make install clean
  安装配置:一般情况下默认即可
  默认配置包括:
  [x[X] IPV6                      Enable IPv6
  [x[X] HTTP_MODULE               Enable HTTP module
  x[X] HTTP_CACHE_MODULE         Enable http_cache module
  x[X] HTTP_REWRITE_MODULE       Enable http_rewrite module
  x[X] HTTP_STATUS_MODULE        Enable http_stub_status module
  x[X] WWW                       Enable html sample files
  2、配置
  硬件为双C8核8G内存机器
  全局配置文件
  # nginx.conf
  user                    www;
  worker_processes        8;
  error_log               /data/logs/nginx_error.log;
  pid                     /var/run/nginx.pid;
  events {
  worker_connections      10000;
  }
  http {
  access_log              off;
  charset  utf-8;
  include                 mime.types;
  default_type            application/octet-stream;
  sendfile                on;
  tcp_nopush              on;
  keepalive_timeout       10;
  tcp_nodelay             on;
  server_tokens           off;
  gzip                    off;
  gzip_types              text/plain text/xml;
  client_max_body_size    8M;
  proxy_read_timeout      300;
  fastcgi_connect_timeout 10;
  fastcgi_send_timeout    300;
  fastcgi_read_timeout    300;
  fastcgi_buffer_size     8k;
  fastcgi_buffers         16 8k;
  server_names_hash_bucket_size   64;
  large_client_header_buffers     64 8k;
  #       fastcgi_temp_path       /data/tmp/nginx_fastcgi_temp;
  #       client_body_temp_path   /data/tmp/nginx_client_body_temp;
  #                proxy_temp_path        /data/tmp/nginx_proxy_temp;
  index                   index.htm index.html;
  #set_real_ip_from        10.10.10.11;
  #set_real_ip_from        10.10.10.12;
  #real_ip_header          X-Real-IP;
  #定义错误页面
  error_page 404 http://www.www.skylog.cn/static/error.html;
  error_page 403 http://www.www.skylog.cn/static/error.html;
  server {
  listen          80;
  server_name     122.226.66.20;
  root    /data/vhosts/default;
  location /nginx_status {
  stub_status on;
  allow 127.0.0.1;
  deny all;
  }
  #       access_log      /data/logs/default_web.log;
  #       error_page      404 http://$host/;
  }
  include vhosts/*.conf;
  }
  虚拟站点配置文件
  server {
  listen  80;
  server_name  hd.test.com;
  root  /data/vhosts/hd.test.com/public;
  access_log      /data/logs/hd.test.com-access_log;
  location / {
  alias  /data/vhosts/hd.test.com/public/;
  index index.html index.php;
  # if file exists return it right away
  if (-f $request_filename) {
  break;
  }
  # otherwise rewrite the fucker
  if (!-e $request_filename) {
  rewrite ^(.+)$ /index.php last;
  break;
  }
  }
  location /static {
  alias  /data/vhosts/hd.test.com/view/static/;
  if (-f $request_filename) {
  expires max;
  break;
  }
  }
  location /upload {
  alias /data/vhosts/hd.test.com/upload/;
  }
  # if the request starts with our frontcontroller, pass it on to fastcgi
  location ~ \.php$
  {
  #fastcgi_pass php-fpm;
  fastcgi_index   index.php;
  fastcgi_pass    127.0.0.1:9000;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  fastcgi_param PATH_INFO $fastcgi_script_name;
  include fastcgi_params;
  }
  # IP Filter
  #       allow 10.0.0.1;
  #       deny all;
  }
  3、测试启动
  1)测试
  # nginx –t
  # echo 'nginx_enable="YES"' >> /etc/rc.conf
  # /usr/local/etc/rc.d/nginx start
  2)查看版本
  # nginx -v
  nginx: nginx version: nginx/1.0.6
  3)查看编译参数
  # nginx –V
  4、关于LOG配置
  1)普通格式
  #log_format 有一个默认的,无需设置的combined日志格式设置
  #其格式为
  log_format  combined  '$remote_addr - $remote_user [$time_local]' '$request "$status" $body_bytes_sent ' '"$http_referer" "$http_user_agent" '
  #其他自定义的LOG
  log_format  main  '$remote_addr - $remote_user [$time_local] $request '
  '"$status" $body_bytes_sent "$http_referer" '
  '"$http_user_agent" "$http_x_forwarded_for"';
  log_format download  '$remote_addr - $remote_user [$time_local] '
  '"$request" $status $bytes_sent '
  '"$http_referer" "$http_user_agent" '
  '"$http_range" "$sent_http_content_range
  2)、LOG 使用
  #access_log  logs/$servername-access.log main buffer=32k;
  #access_log  logs/$servername-access.log main;缓冲不会被使用
  access_log  logs/$servername.cn.access.log  main;
  3)、抓时间日志配置
  $request_time: nginx处理请求的时间
  $upstream_response_time: php-cgi的响应时间
  完整的
  log_format  timelog  '$remote_addr - $remote_user [$time_local] $request '
  '"$status" $body_bytes_sent "$http_referer" '
  '"$http_user_agent" "$http_x_forwarded_for"'
  '$request_time $upstream_response_time';
  四、        httpGzip模块配置
  支持在线实时压缩输出数据流
  默认开启,--with-http_gzip_static_module
  在http{}块中
  gzip                    on;
  gzip_min_length                      1k;
  gzip_buffers                 4      16k;
  gzip_http_version           1.1;
  gzip_comp_level               2;
  gzip_types       text/plain application/x-javascript text/css text/javascript application/xml;
  gzip_vary          on;
  说明
  gzip on; #打开gzip压缩
  gzip_min_length  1k; #最小压缩文件大小
  gzip_buffers     4 16k; #压缩缓冲区 申请4个单位16K的内存作为压缩结果流缓存。
  gzip_http_version 1.1; #压缩版本(默认1.1,前端为squid2.5使用1.0)
  gzip_comp_level; 压缩等级,1压缩比最小,处理速度最快。9压缩比最大,传输速度快,但处理最慢,也比较耗CPU资源。
  gzip_types       text/plain application/x-javascript text/css text/html text/javascript application/xml;
  #压缩类型,默认就已经包含text/html 所以上面就不用再写了,当然写上去的话,也不会有问题,但是会有一个warn。
  gzip_vary 可以让前端的缓存服务器缓存经过gzip压缩的页面。例如用squid缓存经过Nginx压缩的数据。
  五、        使用stub_status模块查看nginx状态和Nginx 身份证验证
  模块默认开启
  x[X] HTTP_STATUS_MODULE        Enable http_stub_status module
  可为该功能单独设置访问LOG,访问用户名密码以及可以访问的IP
  放在住配置的站点下
  server_name             192.168.1.200;
  location /nginx_status {
  stub_status on;
  }
  增加,访问LOG,用户密码密码。以及访问控制
  1、使用apache的htpasswd产生用户名密码
  # htpasswd -c /usr/local/etc/nginx/nginx.htpasswd diege
  2、修改配置文件
  location /nginx_status {
  stub_status on;
  access_log /data/logs/nginx_status.log;
  auth_basic "nginx_status";
  auth_basic_user_file /usr/local/etc/nginx/nginx.htpasswd;
  allow 192.168.1.1;
  allow 127.0.0.1;
  deny all;
  }
  3、访问测试
  # tail -f /data/logs/nginx_status.log
  192.168.1.1 - diege [12/Apr/2012:21:36:22 +0800] "GET /nginx_status HTTP/1.1" 200 98 "-" "Mozilla/5.0 (Windows NT 6.1; rv:11.0) Gecko/20100101 Firefox/11.0"
  4、状态说明
  Active connections 当前活跃的链接数
  8 8 18 三个数分别为Nginx当前总共处理的连接个数,成功创建的握手次数,总共处理的请求数。
  Reading:表示读取到客户端的Header信息数
  Writing:表示Nginx返回给客户端的Header信息数
  Waiting:表示Nginx已处理完,正在等候下一次请求指令时的驻留链接数
  六、        使用ngx_http_access_module限制ip访问
  这个模块是默认模块,默认开启
  使用deny和allow 对IP进行访问控制,一般放在location下
  deny和allow放在前面的覆盖后面的,放在前面的优先,需要例外时放在前面。所以,一般我们允许访问的IP,然后拒绝所有IP。
  location / {
  deny 192.168.1.1;
  allow 192.168.1.0/24;
  allow 10.1.1.0/16;
  deny all;
  }
  七、        nginx 日志分隔
  原理:向Nginx进程传递USR1信号产生新日志文件
  Nginx几个常用的进程信号
  HUP:重新加载配置文件
  USR1:日志切换,重新打开一个日志文件
  USER2:用于平滑升级可执行程序
  1、  服务器只有单个虚拟站点脚本
  #!/bin/sh
  # Name :            gzip_hd.test.com_log.sh
  # Date created :    2012-04-16
  # Whom :            diege
  # Version :         V1.0,2012-04-16
  # Description :     处理hd.test.com log
  vhost=hd.test.com
  yesterday=`/bin/date -v -1d +%Y-%m-%d`
  logbak_dir=/data/backup/httplogs
  httplog_dir=/data/logs
  src_file=${httplog_dir}/${vhost}-access_log
  dst_file=${logbak_dir}/${vhost}/${vhost}_${yesterday}_access.log
  gzip_httplog (){
  /bin/mv  $src_file $dst_file
  kill -USR1 `cat  /var/run/nginx.pid`
  cd ${logbak_dir}/${vhost}/ && gzip ${vhost}_${yesterday}_access.log
  }
  if [ -d ${logbak_dir}/${vhost} ];then
  gzip_httplog
  else
  mkdir -p ${logbak_dir}/${vhost}
  gzip_httplog
  fi
  2、  一台服务器多个虚拟站点
  #!/bin/sh
  # Name :            gzip_hd.test.com_log.sh
  # Date created :    2012-04-16
  # Whom :            diege
  # Version :         V1.0,2012-04-16
  # Description :     处理hd.test.com log
  vhost=hd.test.com
  yesterday=`/bin/date -v -1d +%Y-%m-%d`
  logbak_dir=/data/backup/httplogs
  httplog_dir=/data/logs
  src_file=${httplog_dir}/${vhost}-access_log
  dst_file=${logbak_dir}/${vhost}/${vhost}_${yesterday}_access.log
  gzip_httplog (){
  /bin/mv  $src_file $dst_file
  kill -USR1 `cat  /var/run/nginx.pid`
  cd ${logbak_dir}/${vhost}/ && gzip ${vhost}_${yesterday}_access.log
  }
  if [ -d ${logbak_dir}/${vhost} ];then
  gzip_httplog
  else
  mkdir -p ${logbak_dir}/${vhost}
  gzip_httplog
  fi
  3、  执行时间 每天凌晨0点
  #crontab –l
  0       0       *       *       *       /root/script/gzip_hd.test.com_log.sh >/dev/null 2>&1


运维网声明 1、欢迎大家加入本站运维交流群:群①:263444886群②:197202523群③:485755530群④:201730672群⑤:202807635运维网交流群⑥:281548029
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须注明原文的出处
4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
5、运维网 - 服务您的运维操作管理专家!
6、联系人Email:admin@yunvn.com 网址:www.iyunv.com

点击关注更多内容
您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则  允许回帖邮件提醒楼主

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

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

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

扫描微信二维码查看详情

客服 E-mail:kefu@yunvn.com

本站由青云提供云计算服务

运维网--中国最专业的运维工程师交流社区

京ICP备14039699号-1 Copyright © 2012-2018

使用手机软件扫描微信二维码

关注我们可获取更多热点资讯

Good good study day day up !


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


独家合作伙伴: 青云cloud

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