我与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那些不得不说的私密二三事!!!的主要内容,如果未能解决你的问题,请参考以下文章