Nginx网站服务
目录
一、Nginx概述
Nginx是一款高性能、轻量级Web服务软件。具有稳定性高、系统资源消耗低、对HTTP并发连接的处理能力高(单台物理服务器可支持30000~50000个并发请求)的特点。
二、Nginx 和 Apache 的区别
最核心的区别在于nginx采用的是异步非阻塞机制,一个进程可以同时处理多个连接;apache采用的是同步阻塞+多进程/多线程模型,一个进程只能同时处理一个连接。
相对来说:
- nginx抗并发能力更高(处理2-3万并发连接数,最高能支持5万并发)
- nginx更轻量,CPU、内存资源消耗更少
- nginx配置简介,使用场景多,性能稳定
三、Nginx的应用场景
用作Web网站服务,处理静态网页请求。
用作虚拟机,实现在一个服务器上部署多个网站站点。
用作反向代理、负载均衡,可作为网关代理服务器接收客户端的请求再转发给后端上游服务器处理。
用作Web缓存服务器,缓存经常被访问的静态网页资源。
四、编译安装Nginx
1.安装依赖包
Nginx的配置运行需要pcre、zlib、openssl等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
2.创建运行用户、组(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)
useradd -M -s /sbin/nologin nginx
3.编译安装Nginx
d nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \ #指定nginx的安装路径
--user=nginx \ #指定用户名
--group=nginx \ #指定组名
--with-http_stub_status_module #启用 http_stub_status_module 模块以支持状态统计
make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #让系统识别nginx的操作命令
4.检查、启动、重启、停止 nginx 服务命令
nginx -t #检查配置文件是否配置正确
/usr/local/nginx/sbin/nginx #启动
#停止
cat /usr/local/nginx/logs/nginx.pid#先查看nginx的PID号
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 nginx
kill -USR1 <PID号> #日志分割,重新打开日志文件
kill -USR2 <PID号> #平滑升级
新版本升级的方法:
tar -zxvf nginx-1.xx.xx.tar.gz
cd nginx-1.xx.xx
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
--with-http_ssl_module
make
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old
cp objs/nginx /usr/local/nginx/sbin/nginx
make upgrade
#要保证当前 nginx 进程是通过 /usr/local/nginx/sbin/nginx 启动的,而不是通过查找环境变量中那个 nginx 命令启动的
#或者先 killall nginx ,再/usr/local/nginx/sbin/nginx
5.添加Nginx系统服务
vim /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.target
---------------------------------------------------------
[Unit]:服务的说明
Description:描述服务
After:依赖,当依赖的服务启动之后再启动自定义的服务
[Service]服务运行参数的设置
Type=forking是后台运行的形式,使用此启动类型应同时指定PIDFile=,以便systemd能够跟踪服务的主进程。
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:启动、重启、停止命令全部要求使用绝对路径
[Install]服务安装的相关设置,可设置为多用户
---------------------------------------------------------
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service
五、Nginx服务的主配置文件 - nginx.conf
- 全局块:全局配置,对全局生效;
- events块:配置影响 Nginx 服务器与用户的网络连接;
- http块:配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置;
- server块:配置虚拟主机的相关参数,一个 http 块中可以有多个 server 块;
- location块:用于配置匹配的 uri ;
- upstream:配置后端服务器具体地址,负载均衡配置不可或缺的部分。
1.全局配置
user nobody; #运行用户,若编译时未指定则默认为 nobody
worker_processes 1; #工作进程数量,一般设置为和 CPU 核数一样;设置为auto,nginx将会自己获取这个数值
#error_log logs/error.log; #错误日志文件的位置
#pid logs/nginx.pid; #PID 文件的位置
worker_rlimit_nofile 65535; #指定 worker 子进程可以打开的最大文件句柄数,默认为1024
2.I/O事件配置
events {
use epoll; #使用 epoll I/O模型,2.6及以上版本的系统内核,建议使用epoll模型以提高性能
worker_connections 65535; #每个 worker 子进程能够处理的最大并发连接数
multi_accept on; #告诉nginx收到一个新连接通知后接受尽可能多的连接,默认为off,关闭时一次接收一条连接
accept_mutex on; #默认为on,开启时表示以串行方式接入新连接,否则将通报给所有worker。这可能会浪费资源并产生不可预计的后果,例如惊群问题
3.HTTP配置
http {
##文件扩展名与文件类型映射表
include mime.types;
##默认文件类型
default_type application/octet-stream;
##日志格式设定
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
##访问日志位置
#access_log logs/access.log main;
##开启高效的文件传输模式(启用内核复制模式,大幅提高IO效率)
sendfile on;
##开启tcp_nopush和tcp_nodelay用于防止网络阻塞
#必须在sendfile开启模式才有效,防止网路阻塞,积极的减少网络报文段的数量(将响应头和正文的开始部分一起发送,而不一个接一个的发送。)
tcp_nopush on;
tcp_nodelay on;
##连接保持超时时间,单位是秒
#keepalive_timeout 0;
keepalive_timeout 65;
##gzip模块设置,设置是否开启gzip压缩输出
#gzip on;
##Web 服务的监听配置
server {
##监听地址及端口
listen 80;
##站点域名,可以有多个,用空格隔开
server_name www.xy101.com;
##网页的默认字符集
charset utf-8;
##根目录配置
location / {
##网站根目录的位置/usr/local/nginx/html
root html;
##默认首页文件名
index index.html index.php;
}
##内部错误的反馈页面
error_page 500 502 503 504 /50x.html;
##错误页面配置
location = /50x.html {
root html;
}
}
}
六、Nginx设置最大并发
进入nginx.conf中编辑:
vim /usr/local/nginx/conf/nginx.conf
......
worker_processes 1 #设置工作进程数量,一般与CPU数量相同或设置为auto
worker_connections 1024 #设置每个worker进程能够处理的连接数
worker_rlimit_nofile 65535 #设置每个worker进程最大可以打开的文件数
使用ulimit命令:
ulimit -SHn 65535 #指定进程能够打开的文件数
在/etc/security/limits.conf中编辑:
vim /etc/security/limits.conf
......
* soft nofile 65535
* hard nofile 65535
七.Nginx访问状态统计
1.安装nginx时添加状态统计模块
./configure --with-http_stub_status_module
2.修改 nginx.conf 配置文件,开启状态统计功能
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.xy101.com;
charset utf-8;
location / {
root html;
index index.html index.php;
}
##添加 stub_status 配置##
location /status { #访问位置为/status
stub_status on; #打开状态统计功能
access_log off; #关闭此位置的日志记录
}
}
}
3.重启服务,访问测试
systemctl restart nginx
浏览器访问 http://192.168.80.10/status
Active connections:表示当前的活动连接数,即当前与 Nginx 服务器建立的连接数。
server accepts handled requests :表示已经处理的连接信息
三个数字依次表示服务器已接收的连接数;服务器成功处理的连接数;服务器累计处理的总请求数(在保持连接模式下,请求数量可能会大于连接数量)
Reading:表示当前正在从客户端读取数据的连接数。
Writing:表示当前正在向客户端写入数据的连接数。
Waiting:表示当前空闲并等待请求的连接数。
可 curl -Ls http://192.168.80.10/status 结合 awk与if 语句进行性能监控。
八、访问控制
1.基于授权的访问控制
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
2.修改主配置文件相对应目录,添加认证配置项
vim /usr/local/nginx/conf/nginx.conf
......
server {
location / {
......
##添加认证配置##
auth_basic "secret";#设置密码提示框文字信息
auth_basic_user_file /usr/local/nginx/passwd.db;
}
}
3.重启服务,访问测试
nginx -t
systemctl restart nginx
浏览器访问 http://192.168.80.10
2.基于客户端的访问控制
访问控制规则如下:
- deny IP/IP 段:拒绝某个 IP 或 IP 段的客户端访问。
- allow IP/IP 段:允许某个 IP 或 IP 段的客户端访问。
规则从上往下执行,如匹配则停止,不再往下匹配。
vim /usr/local/nginx/conf/nginx.conf
......
server {
location / {
......
##添加控制规则##
allow 192.168.80.200; #允许访问的客户端 IP
deny all; #拒绝其它IP客户端访问
}
}
systemctl restart nginx
九、Nginx虚拟主机
1.基于域名的Nginx虚拟主机
1.为虚拟主机提供域名解析
echo "192.168.80.10 www.xy101.com www.xy102.com" >> /etc/hosts
2.为虚拟主机准备网页文档
mkdir -p /var/www/html/xy102
mkdir -p /var/www/html/xy101
echo "<h1>www.bi01.com</h1>" > /var/www/html/bi01/index.html
echo "<h1>www.bi02.com</h1>" > /var/www/html/bi02/index.html
3.修改Nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
server {
listen 80;
server_name www.bi01.com; #设置域名www.bi01.com
charset utf-8;
access_log logs/www.bi01.access.log; #设置日志名
location / {
root /var/www/html/bi01; #设置www.xy101.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.bi02.com; #设置域名www.bi02.com
charset utf-8;
access_log logs/www.bi02.access.log;
location / {
root /var/www/html/bi02;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
}
4.重启服务,访问测试
2.基于IP的Nginx虚拟主机
1.需多张网卡,且网段不能相同
2.为虚拟主机准备网页文档
3.修改Nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
server {
listen 192.168.80.10:80;#设置监听地址192.168.80.10
server_name www.bi01.com;
charset utf-8;
access_log logs/www.bi01.access.log;
location / {
root /var/www/html/bi01;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
server {
listen 192.168.90.11:80;#设置监听地址192.168.80.11
server_name www.bi02.com;
charset utf-8;
access_log logs/www.bi02.access.log;
location / {
root /var/www/html/bi02;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
}
4.重启服务,访问测试
3.基于端口的Nginx虚拟主机
1.为虚拟主机准备网页文档
2.修改Nginx配置文件
vim /usr/local/nginx/conf/nginx.conf
......
http {
......
server {
listen 192.168.80.10:8080; #设置监听 8080 端口
server_name www.bi01.com;
charset utf-8;
access_log logs/www.bi01.access.log;
location / {
root /var/www/html/bi01;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
server {
listen 192.168.80.10:8888; #设置监听 8888 端口
server_name www.bi02.com;
charset utf-8;
access_log logs/www.bi02.access.log;
location / {
root /var/www/html/bi02;
index index.html index.php;
}
error_page 500 502 503 504 /50x.html;
location = 50x.html{
root html;
}
}
}
3.重启服务,访问测试
原文地址:https://blog.csdn.net/2401_85983616/article/details/142365367
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!