热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

这篇文章主要介绍了Nginx服务器初期基本配置指南,包括重定向以及基本的负载均衡配置等,需要的朋友可以参考下

一、准备
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; 
 } 

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


推荐阅读
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
author-avatar
坚强的浅悠轩_871
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有