nginx基础

Posted 恢恢恢恢

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx基础相关的知识,希望对你有一定的参考价值。

 Nginx(发音engine x)专为性能优化而开发,其最知名的优点是它的稳定性和低系统资源消耗,以及对HTTP并发连接的高处理能力(单台物理服务器可支持30000~50000个并发请求)。正因为如此,大量提供社交网站、新闻资讯、电子商务以及虚拟主机等服务的企业纷纷选择Ngnix来提供WEB服务。如新浪,金山,网易,腾讯,百度文库,51cto,人人网等。

网站 apache IIS lighttpd html
负载均衡 lvs haproxy
反向代理 squid varnish

 

apache select
nginx epoll事件模型

 

Nginx官方站点:http://nginx.org

wget http://nginx.org/download/nginx-1.6.2.tar.gz

 


淘宝Tengine:http://tengine.taobao.org/

http://toolbar.netcraft.com/site_report?url=undefined#last_reboot

 

1)安装支持软件:
Nginx的配置及运行需要pcre、zlib等软件包的支持,因此应预先安装这些软件的开发包(devel),以便提供相应的库和头文件,确保Nginx的安装顺利完成。

 

1
2
3
4
[root@nginx ~]# service iptables stop
[root@nginx ~]# setenforce 0
[root@nginx ~]# service httpd stop
[root@nginx ~]# yum -y install pcre-devel(支持rewrite规则的模块) zlib-devel

 

2)创建运行用户、组:
Nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限,增加灵活性、降低安全风险。如:创建一个名为nginx的用户,不建立宿主目录,也禁止登录到shell环境。

1
[root@nginx ~]# useradd -M -s /sbin/nologin nginx

 

3)编译安装nginx:
释放nginx源码包 tar xf nginx-1.6.2

编译前配置:

1
2
[root@nginx ~]# cd /usr/src/nginx-1.6.2/
[root@nginx nginx-1.6.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module

注:配置前可以参考:./configure --help给出说明
--prefix 设定Nginx的安装目录
--user和—group 指定Nginx运行用户和组
--with-http_stub_status_module 启用http_stub_status_module模块以支持状态统计
--with-http_ssl_module 启用SSL模块
--with-http_flv_module 启用FLV模块,提供寻求内存使用基于时间的偏移量文件

 

编译 安装:

1
[root@nginx nginx-1.6.2]# make && make install

  

 为了使Nginx服务器的运行更加方便,可以为主程序nginx创建链接文件,以便管理员直接执行nginx命令就可以调用Nginx的主程序。

 

1
2
3
[root@nginx nginx-1.6.2]# ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/
[root@nginx nginx-1.6.2]# ll /usr/local/bin/nginx
lrwxrwxrwx 1 root root 27 12-29 07:24 /usr/local/bin/nginx -> /usr/local/nginx/sbin/nginx

Nginx的运行控制:
与Apache的主程序httpd类似,Nginx的主程序也提供了"-t"选项用来对配置文件进行检查,以便找出不当或错误的配置。配置文件nginx.conf默认位于安装目录/usr/local/nginx/conf/目录中。若要检查位于其他位置的配置文件,可使用"-c"选项来指定路径。

主程序Nginx支持标准的进程信号,通过kill或者killall命令传送  

HUP 重载配置 等同于-1
QUIT 退出进程 等同于-3
KILL 杀死进程
USR1 重新写入日志
USR2 平滑重启

1
2
3
[root@nginx ~]# killall -s HUP nginx
[root@nginx ~]# killall -s QUIT nginx
[root@nginx ~]# netstat -anpt |grep :80

nginx 服务脚本

 

#! /bin/sh
# chkconfig: 2345 55 25
# Description: Startup script for nginx webserver on Debian. Place in /etc/init.d and
# run \'update-rc.d -f nginx defaults\', or use the appropriate command on your
# distro. For CentOS/Redhat run: \'chkconfig --add nginx\'

### BEGIN INIT INFO
# Provides: nginx
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the nginx web server
# Description: starts nginx using start-stop-daemon
### END INIT INFO

# Author: licess
# website: https://lnmp.org

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=nginx
NGINX_BIN=/usr/local/nginx/sbin/$NAME
CONFIGFILE=/usr/local/nginx/conf/$NAME.conf
PIDFILE=/usr/local/nginx/logs/$NAME.pid
if [ -s /bin/ss ]; then
StatBin=/bin/ss
else
StatBin=/bin/netstat
fi


case "$1" in
start)
echo -n "Starting $NAME... "

if $StatBin -tnpl | grep -q nginx;then
echo "$NAME (pid `pidof $NAME`) already running."
exit 1
fi

$NGINX_BIN -c $CONFIGFILE

if [ "$?" != 0 ] ; then
echo " failed"
exit 1
else
echo " done"
fi
;;

stop)
echo -n "Stoping $NAME... "

if ! $StatBin -tnpl | grep -q nginx; then
echo "$NAME is not running."
exit 1
fi

$NGINX_BIN -s stop

if [ "$?" != 0 ] ; then
echo " failed. Use force-quit"
exit 1
else
echo " done"
fi
;;

status)
if $StatBin -tnpl | grep -q nginx; then
PID=`pidof nginx`
echo "$NAME (pid $PID) is running..."
else
echo "$NAME is stopped."
exit 0
fi
;;

force-quit|kill)
echo -n "Terminating $NAME... "

if ! $StatBin -tnpl | grep -q nginx; then
echo "$NAME is is stopped."
exit 1
fi

kill `pidof $NAME`

if [ "$?" != 0 ] ; then
echo " failed"
exit 1
else
echo " done"
fi
;;

restart)
$0 stop
sleep 1
$0 start
;;

reload)
echo -n "Reload service $NAME... "

if $StatBin -tnpl | grep -q nginx; then
$NGINX_BIN -s reload
echo " done"
else
echo "$NAME is not running, can\'t reload."
exit 1
fi
;;

configtest)
echo -n "Test $NAME configure files... "

$NGINX_BIN -t
;;

*)
echo "Usage: $0 {start|stop|restart|reload|status|configtest|force-quit|kill}"
exit 1
;;

 

 

 

 

 

 

nginx服务器配置过程中的root路径配置

 
在nginx服务器的root路径配置过程中总会遇到一些问题
1、相对路径的问题
    
源配置文件中对location ~ \\.php${
root html
}
   此示例中的html是一个相对路径,相对的是这个配置文件的路径,假设此配置文件的位置是/etc/nginx/conf.d,那么这个html的绝对路径就是/etc/nginx/conf.d/html。在配置root路径的过程中最好用绝对路径。
 
2、路径的继承问题
   假如server 中声明root     /usr/share;
   那么此时声明 location /{
         root /usr/html/www
}
  此时就会覆盖掉server root 中的路径
假如此时声明 location /app {
 
}
那么此时所有的操作就是基于路径/usr/share/app
 
3、首页的设置问题
    
      假如我们在声明server 中声明 index   index.html index.php
      那么我们此时请求 / 就会在内部重定向到 url/index.php 或者 url/index.html
      然后再由先关的location 进行匹配 之后再进行解析

 http模块配置

 

 

 4、状态统计及虚拟主机应用:
Nginx内置了HTTP_STUB_STATUS状态统计模块,用来反馈当前的WEB访问情况。配置
编译参数时可添加--with-http_stub_stastus_module来启用此模块。要使用Nginx的状态统计功能,除了启用内建模块以外,还需要修改nginx.conf文件,指定访问位置并打开stub_status配置。在http{}配置的server{}子配置内添加如下配置项

server{

  location /nginx_status{

  stub_status on;

  access_log on;

  }

}

 

Active connections: 1 
server accepts handled requests
1 1 3 
Reading: 0 Writing: 1 Waiting: 0

  

Active connections 表示当前活跃的连接数,
第二行的三个数字表示Nginx当前总共 处理了1个连接,成功创建1次握手,总共处理了3个请求。
最后一行的Reading表示Nginx读取到客户端Header信息数, 
Writing表示Nginx返回给客户端的Header信息数
“Waiting”表示Nginx已经处理完,正在等候下一次请求指令时的驻留连接数。

 

Nginx 支持为目录添加密码认证 

 

将每天的日志重新切割存放

 

 

 ./ ->configuration A

./documents/document.html -> configuration B
./images/1.gif -> configuration C
./document/1.jpg -> configuration D
 
 

Nginx rewrite
Rewrite 主要的功能就是实现URL的重写,Nginx的Rewrite规则采用PCRE(Perl Compatible Regular Expressions)
perl兼容正则表达式的语法进行规则的功能,在编译Nginx之前,需要编译安装PCRE库

URL是Uniform Resource Location的缩写,译为“统一资源定位符”。如:http://www.linkwan.com/111/welcome.htm

URI由一个通过通用资源标志符(Universal Resource identifier,简称“URI”)进行定位。

if指令
规则语法

 

rewrite语法规则
变量名
变量名可以使用"="或"!="运算符
"~" 符号表示区分大小写字母的匹配
"~*" 符号表示不区分大小写字母的匹配
"!~" 和"!~*"与"~" "!~"相反
"-f"和"!-f" 用来判断文件是否存在
"-d"和"!-d" 用来判断目录是否存在
"-e"和"!-e" 用来判断文件或目录是否存在
"-x"和"!-x" 用来判断文件是否可以执行
也支持$!到$9位置化参数

return指令
示例,如果访问的URL以"*.sh" "*.bash"结尾,则返回状态码403

 

 

 

 

以上是关于nginx基础的主要内容,如果未能解决你的问题,请参考以下文章

nginx.conf 忽略了 nginx-ingress 配置映射片段

将 nginx rtmp 片段发送到 WebRTC

text 有用的nginx命令和片段

[Go] 通过 17 个简短代码片段,切底弄懂 channel 基础

linux学习:Nginx--常见功能配置片段与优化-06

201555332盛照宗—网络对抗实验1—逆向与bof基础