侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Nginx服务器初期基本配置指南

linux  /  管理员 发布于 7年前   184

一、准备
pcre,有关正则表达式匹配;zlib,用于压缩。这些就不细说了,如果要安装最简版的nginx,记得准备好这两样东西就好了。
用root账户启动服务是比较危险的!  前段时间,测试服务器被黑掉了,终归到底是通过一个root启动的服务上传了木马,最后连ssh都屏蔽了,活生生成为一台肉鸡。。。
所以,惨痛的经验告诉我,一定要为服务建立对应的组和用户,限制访问权限,降低风险! 
这里为nginx建立一个www组,并建立一个不登录的账户nginx:

#追加一个www组 groupadd -f www #追加一个nginx用户 useradd -s /sbin/nologin -g www nginx 


建立一个目录用于存放nginx日志文件,并赋予相应权限:

#建立nginx日志目录 mkdir /var/log/nginx #赋予访问权限 chown nginx.www /var/log/nginx 


二、编译安装
我把pcre、zlib、nginx的压缩包都放在了/opt/software路径下,服务要装在/opt/servers路径下。
先对pcre、zlib、nginx解压,然后编译安装:

./configure --prefix=/opt/servers/nginx \ --user=nginx \ --group=www \ --pid-path=/var/run/nginx.pid \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --with-pcre=/opt/software/pcre-8.10 \ --with-zlib=/opt/software/zlib-1.2.5 \ --with-http_stub_status_module \ --with-http_realip_module \ --with-http_gzip_static_module \ --without-http_fastcgi_module \ --without-http_memcached_module \ --without-http_map_module \ --without-http_geo_module \ --without-http_autoindex_module \ --with-poll_module && make && make install 


三、系统配置
我希望nginx可以作为一个服务,通过service命令启动或停止。
这样做的好处是,不论我用什么用户调用这个service命令,都不会因为使用错误的账户带来安全问题。
建立一个系统文件:

vim /etc/init.d/nginx 


前人栽树,后人乘凉。已经有老鸟做好了启动配置文件:

#!/bin/bash # v.0.0.1 # create by jackbillow at 2007.10.15 # nginx - This shell script takes care of starting and stopping nginx. # # chkconfig: - 60 50 # description: nginx [engine x] is light http web/proxy server # that answers incoming ftp service requests. # processname: nginx # config: /etc/nginx.conf nginx_path="/opt/servers/nginx" nginx_pid="/var/run/nginx.pid"  # Source function library. . /etc/rc.d/init.d/functions  # Source networking configuration. . /etc/sysconfig/network  # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 0 [ -x $nginx_path/sbin/nginx ] || exit 0 RETVAL=0 prog="nginx" start() { # Start daemons. if [ -e $nginx_pid -a ! -z $nginx_pid ];then   echo "nginx already running...."   exit 1 fi if [ -e $nginx_path/conf/nginx.conf ];then   echo -n $"Starting $prog: "   $nginx_path/sbin/nginx -c $nginx_path/conf/nginx.conf &   RETVAL=$?   [ $RETVAL -eq 0 ] && {     touch /var/lock/subsys/$prog     success $"$prog"   }   echo else   RETVAL=1 fi   return $RETVAL } # Stop daemons. stop() {   echo -n $"Stopping $prog: "   killproc -d 10 $nigx_path/sbin/nginx   RETVAL=$?   echo   [ $RETVAL = 0 ] && rm -f $nginx_pid /var/lock/subsys/$prog } # See how we were called. case "$1" in start)   start   ;; stop)   stop   ;; restart)   stop   start   ;; status)   status $prog   RETVAL=$?   ;; *)   echo $"Usage: $0 {start|stop|restart|status}"   exit 1 esac exit $RETVAL 


注意,这里的路径:
引用

nginx_path="/opt/servers/nginx" nginx_pid="/var/run/nginx.pid" 


如果你的nginx安装路径在其它位置,请对应修改!
然后赋予这个文件执行权限:

chmod +x /etc/init.d/nginx 


追加为系统服务:

chkconfig --add nginx chkconfig nginx on 


现在就可以使用,如下命令控制nginx服务了!
引用

#启动nginx service nginx start #停止nginx service nginx stop #重启nginx service nginx restart #查看nginx状态 service nginx status 


四、基本配置
完成上述工作后,nginx还不能急于投入使用,需要做一些基本配置与优化工作。
修改nginx配置文件:

vim /opt/servers/nginx/conf/nginx.conf 

微调
引用

#使用的用户和组,这里我们为nginx服务新建了nginx账户和www工作组 user nginx www; #制定的工作衍生进程数(2倍于CPU内核数) worker_processes 4; #错误日志存放路径,日志级别由低到高[debug | info | notice | warn | error | crit] error_log /var/log/nginx/error.log crit; #指定文件描述符数量 与ulimit -n数值保持一致 work_rlimit_nofile 65535; events { #使用的网络I/O模型,Linux用epoll模型,Unix用kqueue模型 use epoll; #允许的连接数 worker_connections 51200; } http{  include  mime.types;  default_type application/octet-stream;  #追加 '"$sent_http_cache_control" "$sent_http_pl" "$request_time"'获取请求细节信息  log_format main '$remote_addr - $remote_user [$time_local] "$request" '       '$status $body_bytes_sent "$http_referer" '       '"$http_user_agent" "$http_x_forwarded_for"'       '"$sent_http_cache_control""$sent_http_pl" "$request_time"';  access_log   /var/log/nginx/access.log main;  ...  server{   ...   location / {    root html;    index index.html index.htm index.jsp index.do;    #在header中传递请求放host、ip等信息    proxy_set_header Host $host;    proxy_set_header X-Real-IP $remote_addr;    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    proxy_pass_header Content-Type;    proxy_pass_header Content-Disposition;    proxy_pass_header Content-Length;    ...   }  } } 


五、虚拟目录
nginx配置虚拟目录很简单,主要是运用root、alias两个指令。
以访问图片服务为例:
root,用于相对路径
引用

  location /image/ {     root /data;   } 

当我们访问“/image/”路径时,实际上访问的是“/data/image/”,注意“/data”后面不要有“/”
alias,用于绝对路径
引用

  location /image/ {     alias /data/img/;   } 

当我们访问“/image/”路径时,实际上访问的是“/data/img/”,注意“/data/img/”以“/”结尾。

六、重定向
有时候链接不加考虑就放出去了,突然哪天需要调整,又不能及时撤回已放出的链接地址。只好自己修改nginx配置。
譬如,放出去的链接:/activity.do?m=v 想让它指到/路径上:
引用

rewrite ^/activity(.*)$ / last;


想要把请求来的参数也带上:
引用

rewrite ^/activity(.*)$ /$1 last;


$1指得是第一个参数,以此类推。


六、监控
引用

  location /status {    stub_status on;    access_log off;    allow 10.10.0.0/16;    allow 10.1.0.0/16;    allow 10.11.0.0/16;    deny all;   }


引用

Active connections: 14 server accepts handled requests 62 62 302 Reading: 0 Writing: 3 Waiting: 11 


七、日志分割

#!/bin/bash # THis script run at 00:00 # author dongliang at 2012-09-07 # Nginx Log Path logs_path="/var/log/nginx/" # Nginx PID Path nginx_pid="/var/run/nginx.pid"  mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/  mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" +"%Y%m% d").log  mv ${logs_path}error.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/error_$(date -d "yesterday" +"%Y%m%d" ).log  kill -USR1 `cat $nginx_pid` 


赋予执行权限

chmod +x nginx_log.sh 

凌晨执行

crontab -e 0 0 * * * /opt/script/nginx_log.sh 

八、Nginx负载均衡
在http{...}中配置一个upstream{...},参考如下:
引用

 upstream tomcat {   server 10.11.155.26:8080;   server 10.11.155.41:8080;  } 

接着修改location节点,配置代理:
引用

location / {   ...    proxy_pass http://tomcat;   ... }

当访问根路径时,会轮播路由到两台服务器上,至于后端服务器是tomcat还是jetty之类的,都无所谓,照葫芦画瓢就是了。
当然,有的机器性能好,或者负载低,可以承担高负荷访问量,可以通过权重(weight),提升访问频率。数值越高,被分配到的请求数越多。
server指令参数如下:
weight――权重,数值越大,分得的请求数就越多,默认值为1。
max_fails――对访问失败的后端服务器尝试访问的次数。默认值为1,当设置为0时将关闭检查。
fail_timeout――失效超时时间,当多次访问失败后,对该节点暂停访问。
down――标记服务器为永久离线状态,用于ip_hash指令。
backup――仅当非backup服务器全部宕机或繁忙时启用。

例如,可以这样配置:
引用

 upstream tomcat {   server 10.11.155.26:8080 weight=5;   server 10.11.155.41:8080 weight=10;  } 

后者分得的请求数就会较高。


  • 上一条:
    Nginx中配置过滤爬虫的User-Agent的简单方法
    下一条:
    配置ab来为Nginx服务器做压力测试的方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在Linux系统中使用Iptables实现流量转发功能流程步骤(0个评论)
    • vim学习笔记-入门级需要了解的一些快捷键(0个评论)
    • 在centos7系统中实现分区并格式化挂载一块硬盘到/data目录流程步骤(0个评论)
    • 在Linux系统种查看某一个进程所占用的内存命令(0个评论)
    • Linux中grep命令中的10种高级用法浅析(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-11
    • 2017-07
    • 2017-10
    • 2017-11
    • 2018-01
    • 2018-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-03
    • 2022-04
    • 2022-08
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-06
    • 2023-07
    • 2023-10
    • 2023-12
    • 2024-01
    • 2024-04
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客