我与nginx那些不得不说的私密二三事!!!

Posted 28线不知名云架构师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我与nginx那些不得不说的私密二三事!!!相关的知识,希望对你有一定的参考价值。

一、nginx基础知识

nginx是一款高性能、轻量级web服务软件,它稳定性高,对系统资源消耗低,对HTTP并发连接的处理性能高(单台物理服务器可支持3-5W个并发请求)

二、安装nginx

①下载前准备

关闭防火墙,将安装所需的软件包放到/opt目录下

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

②下载安装依赖包

yum install -y gcc gcc-c++ pcre-devel zlib-devel make

③编译安装

cd /opt
tar zxvf nginx-1.12.2.tar.gz
cd /opt/nginx-1.12.2/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module

make && make install

ln -s /usr/local/nginx/sbin/* /usr/local/sbin/ 
useradd -M -s /sbin/nologin nginx 

④检查、启用、添加系统管理

常用命令
nginx -t   #检查配置文件是否正确
nginx      #启动nginx服务
-------停止nginx服务-------
cat /usr/local/nginx/logs/nginx.pid    #查看nginx进程号
kill -3 <PID号>
kill -s QUIT <PID号> 
killall -3 nginx 
killall -s QUIT nginx
------重载--------
kill -1 <PID号>
kill -s HUP <PID号>
killall -1 nginx
killall -s HUP <PID号>

添加系统管理方式一:srevice管理

vim /etc/init.d/nginx
#!/bin/bash
# chkconfig: - 99 20							# chkcofig - “-” 表示不启用开机启动管理 (同时 若不加“#”, chkconfig add nginx 会加载不到配置)
# description: Nginx Service Control Script
COM="/usr/local/nginx/sbin/nginx"				#命令程序文件位置(nginx)
PID="/usr/local/nginx/logs/nginx.pid"			#pid文件
case "$1" in
start)
   $COM
   ;;
stop)
   kill -s QUIT $(cat $PID)
   ;;
restart)
   $0 stop
   $0 start
   ;;
reload)
   kill -s HUP $(cat $PID)
   ;;
*)
       echo "Usage: $0 {start|stop|restart|reload}"
       exit 1
esac
exit 0

chmod +x /etc/init.d/nginx
chkconfig --add nginx         #添加为系统服务
systemctl stop nginx
systemctl start nginx

添加系统管理方式二:systemctl管理

vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile =/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.targe

[Unit]	
Description=nginx							#描述
After=network.target						#描述服务类别
[Service]
Type=forking								#后台运行类型
PIDFile =/usr/local/nginx/logs/nginx.pid	#PID文件位置
ExecStart=/usr/local/nginx/sbin/nginx		#启动服务
ExecrReload=/bin/kill -s HUP $MAINPID		#根据PID重载配置
ExecrStop=/bin/kill -s QUIT $MAINPID		#根据PID终止进程
PrivateTmp=true
[Install]
WantedBy=multi-user.target					#启动级别

chmod 754 /lib/systemd/system/nginx.service		#设置754权限是一种安全优化
systemctl start nginx.service
systemctl enable nginx.service

三、nginx的配置文件

3.1 备份主配置文件

cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak

Ps:①使用'ulimit -n 65535'命令临时修改本地每个进程可以同时打开最大文件数。

②在Linux平台中,在运行高并发TCP连接处理时,最高的并发数量都要受到系统用户对用户单一进程同时可打开文件数量的限制

③使用’ulimit -a’ 命令查看当前系统允许用户进程打开的文件数限制

配置本地映射

echo "192.168.10.128 www.ky11.com" >> /etc/hosts

3.2 访问域名

www.ky11.com

3.3 访问状态统计

3.3.1 查看已安装nginx是否包含HTTP_STUB_STATUS模块

/usr/local/nginx/sbin/nginx -V   

3.3.2 修改 nginx.conf 配置文件,指定访问位置并添加 stub_status 配置

cd /usr/local/nginx/conf
cp nginx.conf nginx.conf.bak
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
	server {
		listen 80;
		server_name www.lic.com;
		charset utf-8;
		location / {
			root html;
			index index.html index.php;
		}
		##添加 stub_status 配置##
		location /status { 					#访问位置为/status
			stub_status on; 				#打开状态统计功能
			access_log off; 				#关闭此位置的日志记录
		}
	}
}

3.3.3 重启服务、访问测试

systemctl stop nginx
systemctl start nginx

浏览器访问http://www.ky11.com/status 
Active connections : 表示当前的活动连接数;
serveracceptshandledrequests:表示已经处理的连接信息,三个数字依次表示已处理的连接数、成功的TCP握手次数、
已处理的请求数。

可curl http://www.ky11.com/status 结合awk与if语句进行性能监控。

3.4 访问控制

3.4.1 生成用户密码认证文件

yum install -y httpd-tools
htpasswd -c /usr/local/nginx/passwd.db zhangsan
chown nginx /usr/local/nginx/passwd.db
chmod 400 /usr/local/nginx/passwd.db

3.4.2 修改主配置文件相对应目录,添加认证配置项

vim /usr/local/nginx/conf/nginx.conf
......
	server {
		location / {
			......
			##添加认证配置##
			auth_basic "secret";
			auth_basic_user_file /usr/local/nginx/passwd.db;
		}
	}

3.4.3 重启服务,访问测试

nginx -t
systemctl restart nginx

浏览器访问 http://192.168.10.128

3.5 基于客户端的访问控制

3.5.1 访问控制规则如下

  • deny IP/IP 段:拒绝某个 IP 或 IP 段的客户端访问。
  • allow IP/IP 段:允许某个 IP 或 IP 段的客户端访问。
  • 规则从上往下执行,如匹配则停止,不再往下匹配
vim /usr/local/nginx/conf/nginx.conf
......
	server {
		location / {
			......
			##添加控制规则##
			deny 192.168.10.129; 					#拒绝访问的客户端 IP
			allow all;								#允许其它IP客户端访问
		}
	}

systemctl restart nginx

四、虚拟主机

4.1 基于域名

①为虚拟主机提供域名解析

echo "192.168.10.128 www.ky11.com www.accp.com" >> /etc/hosts

②为虚拟主机准备网页文档

mkdir -p /var/www/html/ky11
mkdir -p /var/www/html/accp
echo "<h1>www.ky11.com</h1>" > /var/www/html/ky11/index.html
echo "<h1>www.accp.com</h1>" > /var/www/html/accp/index.html

③修改Nginx的配置文件

vim /usr/local/nginx/conf/nginx.conf
......
http {
......
	server {
		listen 80;
		server_name www.ky11.com;					#设置域名www.ky11.com
		charset utf-8;
		access_log logs/www.ky11.access.log; 
		location / {
			root /var/www/html/ky11;					#设置www.ky11.com 的工作目录
			index index.html index.php;
		}
		error_page 500 502 503 504 /50x.html;
		location = 50x.html{
			root html;
		}
	}
	
	server {
		listen 80;
		server_name www.accp.com;					#设置域名www.accp.com
		charset utf-8;
		access_log logs/www.accp.access.log; 
		location / {
			root /var/www/html/accp;
			index index.html index.php;
		}
		error_page 500 502 503 504 /50x.html;
		location = 50x.html{
			root html;
		}
	}	
}

④重启服务,测试

syatemctl stop nginx 
systemctl start nginx

浏览器分别访问www.ky11.com / www.accp.com

4.2 基于IP地址的虚拟主机

vim /etc/hosts
192.168.10.110 www.lc.com      #添加192.168.10.110的映射  

mkdir /var/www/html/lc100      #创建网站根目录、创建192.168.10.110的网站首页文件( index. html )
echo "<h1> www.lc110.com </h1>" /var/www/html/lc110/index.html
<h1> www.ky11.com </h1> /var/www/html/ky11/index.html

ifconfig ens33:0 192.168.10.110 netmask 255.255.255.0    #临时创建虚拟网卡
 
修改配置文件
 server {
        listen       192.168.10.128:80;
        server_name  www.ky11.com;
        charset utf-8;
        access_log  logs/ky11.access.log;
        location / {
            root   /var/www/html/ky11;
            index  index.html index.htm;
         }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}

    server {
        listen      192.168.10.110:80;		##监听ip改为100
        server_name  www.lc.com;
        charset utf-8;
        access_log  logs/lc.access.log;
        location / {
            root   /var/www/html/lc;
            index  index.html index.htm;
         }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}

4.3 基于端口的虚拟主机

vim /usr/local/nginx/conf/nginx.conf
......
http {
......
	server {
		listen 192.168.10.128:8080;					#设置监听 8080 端口
		server_name www.ky11.com;
		charset utf-8;
		access_log logs/www.ky11.access.log; 
		location / {
			root /var/www/html/ky11;
			index index.html index.php;
		}
		error_page 500 502 503 504 /50x.html;
		location = 50x.html{
			root html;
		}
	}

server {
	listen 192.168.10.128:8888;					#设置监听 8888 端口
	server_name www.accp.com;
	charset utf-8;
	access_log logs/www.accp.access.log; 
	location / {
		root /var/www/html/accp;
		index index.html index.php;
	}
	error_page 500 502 503 504 /50x.html;
	location = 50x.html{
		root html;
	}
}	

 

以上是关于我与nginx那些不得不说的私密二三事!!!的主要内容,如果未能解决你的问题,请参考以下文章

专访李林锋:我与Netty那些不得不说的事

CSDN记者专访:我与Netty那些不得不说的事

SSL/TLS

征文Hadoop十周年特别策划——我与Hadoop不得不说的故事

生活二三事

Mysql刷脏页的二三事