Nginx的搭建和优化

网友投稿 280 2022-11-01

Nginx的搭建和优化

1、关于nginx

1.1概述

Nginx是一个高性能的HTTP和反向代理服务器。是一款轻量级的高性能的web服务器/反向代理服务器/电子邮件(IMAP/POP3)代理服务器单台物理服务器可支持30 000~50 000个并发请求。对HTTP并发连接的处理能力高

并发连接受因素影响

cpu个数

本地物理服务器系统的最大打开文件数

1.2 Nginx作为web服务器与Apache比较

相比apache,nginx使用更少的资源,支持更多的并发连接,体现更高的效率。

Nginx作为负载均衡服务器:nginx既可以在内部直接支持rails和php程序对外进行服务,也可以支持#关闭防火墙[root@localhost opt]#systemctl stop firewalld[root@localhost opt]#setenforce 02. #安装依赖关系包[root@localhost opt]#yum -y install pcre-devel zlib-devel gcc gcc-c++ make

2.2新建用户 和组便于管理

新建用户 nginx 服务程序默认 以 nobody 身份运行,建议为其创建专门的用户账户,以便更准确的控制访问权限

[root@localhost opt]#useradd -M -s /sbin/nologin nginx

3.3 将压缩包传入到/opt目录下 ,编译安装

#切换至opt目录,将下载好的压缩包传进来[root@localhost opt]#cd /opt[root@localhost opt]#lsnginx-1.12.0.tar.gz#解压文件[root@localhost opt]#tar -zxf nginx-1.12.0.tar.gz [root@localhost opt]#lsnginx-1.12.0  nginx-1.12.0.tar.gz#切换至解压后的文件夹编译[root@localhost nginx-1.12.0]#./configure \> --prefix=/usr/local/nginx \         //安装路径> --user=nginx \                        //指定用户名> --group=nginx \                      //指定用户组> --with-    //启用此模块支持状态统计#安装[root@localhost nginx-1.12.0]#make && make install -j4

make&& make install

2.4 做软连接并启动nginx

#做软连接,让系统识别nginx的操作命令[root@localhost sbin]#ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/#检查配置文件是否配置 正确  [root@localhost sbin]#nginx -t #启动nginx[root@localhost sbin]#nginx   #查看是否启动成功[root@localhost sbin]#ss -ntap|grep nginxLISTEN     0      128          *:80                       *:*                   users:(("nginx",pid=9123,fd=6),("nginx",pid=9122,fd=6))

2.5停止nginx

#先查看nginx的PID号[root@localhost sbin]#cat /usr/local/nginx/logs/nginx.pid 9122#直接杀死kill -3 [root@localhost sbin]#kill -3 9122#就查不到进程了[root@localhost logs]#ss -ntap|grep nginx#一定要杀父进程,杀死子进程是没用的 #查进程号[root@localhost logs]#lsof -i :80COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAMEnginx   10298  root    6u  IPv4  68323      0t0  TCP *:(LISTEN)nginx   10299 nginx    6u  IPv4  68323      0t0  TCP *:(LISTEN)#查看主进程[root@localhost logs]#cat /usr/local/nginx/logs/nginx.pid  10298#杀死子进程[root@localhost logs]#kill -3 10299 #进程没有杀死[root@localhost logs]#cat /usr/local/nginx/logs/nginx.pid  10298#杀死父进程[root@localhost logs]#kill -3 10298#进程杀死了[root@localhost logs]#cat /usr/local/nginx/logs/nginx.pid   #进程杀死了cat: /usr/local/nginx/logs/nginx.pid: 没有那个文件或目录

2.6添加nginx系统服务

[root@localhost system]#cd /lib/systemd/system#编写脚本,建议直接复制[root@localhost system]#vim nginx.service#!/bin.bash[Unit]Description=nginxAfter=network.target[Service]Type=forkingPIDFile=/usr/local/nginx/logs/nginx.pidExecStart=/usr/local/nginx/sbin/nginxExecReload=/usr/bin/kill -s HUP $MAINPIDExecStop=/usr/bin/kill -s QUIT $MAINPIDPrivateTmp=true[Install]WantedBy=multi-user.target##磁盘上的ngin服务更改,运行'systemctl daemon-reload'重新加载单元。[root@localhost system]#systemctl daemon-reload ##启动服务[root@localhost system]#systemctl start nginx

2.7查看nginx版本信息

#nginx -vnginx version: nginx/1.12.0

3.Nginx配置文件

主配置文件  vim /usr/local/nginx/conf/nginx.conf

3.1全局配置

#user nobody;      #运行用户,若编译时未指定则默认为 nobodyworker_processes 4;    #工作进程数量,可配置成服务器内核数 * 2,如果网站访问量不大,一般设为1就够用了#error_log logs/error.log;   #错误日志文件的位置#pid logs/nginx.pid;    #PID 文件的位置

3.2 I/O 事件配置

events {   use epoll;      #使用 epoll 模型,2.6及以上版本的系统内核,建议使用epoll模型以提高性能   worker_connections 4096;  #每个进程处理 4096 个连接}

如提高每个进程的连接数还需执行“ulimit -n 65535”命令临时修改本地每个进程可以同时打开的最大文件数。在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。可使用ulimit -a命令查看系统允许当前用户进程打开的文件数限制。

/etc/security/limits.conf

#epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。

若工作进程数为 8,每个进程处理 4 096 个连接,则允许 Nginx 正常提供服务的连接数

已超过 3 万个(4 096×8=32 768),当然具体还要看服务器硬件、网络带宽等物理条件的性

能表现。

3.3HTTP 配置

使用“{ }”界定标记,包括访问日志、HTTP 端口、网页目录、默认字符集、连接保

持,以及后面要讲到的虚拟 Web 主机、PHP 解析等一系列设置,其中大部分配置语句都包

含在子界定标记“server { }”内

{ include       mime.types;  ##文件扩展名与文件类型映射表  default_type  application/octet-stream;##默认文件类型#日志格式设定   #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '   #                  '$status $body_bytes_sent "$'   #                  '"$"$ logs/access.log  main;   #访问日志位置 sendfile        on; ##支持文件发送(下载)   ##此选项允许或禁止使用socket的TCP_CORK的选项(发送数据包前先缓存数据),此选项仅在使用sendfile的时候使用   #tcp_nopush     on;  ##连接保持超时时间,单位是秒   #keepalive_timeout  0;   keepalive_timeout  65;   #gzip  on; #gzip模块设置,设置是否开启gzip压缩输出##Web 服务的监听配置server { listen 80;    ##监听地址及端口 server_name kgc.com; ##站点域名,可以有多个,用空格隔开 charset utf-8; ##网页的默认字符集 location / {##根目录配置  root html;  ##网站根目录的位置 /usr/local/nginx/html index index.html index.php; ##默认首页文件名  } error_page 500 502 503 504 /50x.html; ##内部错误的反馈页面 location = /50x.html { ##错误页面配置  root html; }}}

3.4 访问状态统计配置

nginx 内置了 HTTP_STUB_STATUS 状态统计模块,用来反馈当前的 Web 访问情况, 配置编译参数时可添加--with-来启用此模块支持,可以使用命令可以使用命令/usr/local/nginx/sbin/nginx –v 查看已安装的 Nginx 是否包含 HTTP_STUB_STATUS 模块。操作步骤:修改 nginx.conf 配置文件,指定访问位置并添加 stub_status 配置(修改之前进行备份)#先拷贝一份配置文件[root@localhost conf]#cp /usr/local/nginx/conf/nginx.conf nginx.conf.bak#  修改 nginx.conf 配置文件[root@localhost conf]#vim /usr/local/nginx/conf/nginx.confevents {    use epoll;    worker_connections  1024;}server {        listen       80;        server_name  yxp.com; charset utf-8;      location / {            root   html;            index  index.html index.htm;  }location /status {  ##访问位置为/status            stub_status on;  ##打开状态统计功能            access_log off;  ##关闭此位置的日志记录        }

3.5 在网页中输入192.168.204.129、status测试

4.基于授权的访问控制

4.1生成用户密码认证文件

yum install -y -c /usr/local/nginx/passwd.db zhangsanchown nginx /usr/local/nginx/passwd.dbchmod 400 /usr/local/nginx/passwd.db

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

vim /usr/local/nginx/conf/nginx.confserver { location / {  ##添加认证配置##  auth_basic "secret";    #设置密码提示框文字信息  auth_basic_user_file /usr/local/nginx/passwd.db; }}

4.3重启服务,访问测试

nginx -tsystemctl restart nginx

4.4浏览器访问 IP/IP 段:拒绝某个 IP 或 IP 段的客户端访问。

allow IP/IP 段:允许某个 IP 或 IP 段的客户端访问。

规则从上往下执行,如匹配则停止,不再往下匹配。

vim /usr/local/nginx/conf/nginx.confserver { location / {  ##添加控制规则##  allow 192.168.204.130;      #允许访问的客户端 IP  deny all;        #拒绝其它IP客户端访问}}

systemctl restart nginx

6.基于域名的 Nginx 虚拟主机

6.1虚拟主机提供域名解析

echo "192.168.10.19 kgc.com benet.com" >> /etc/hosts

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

mkdir -p /var/-p /var/"

kgc.com

" > /var/"

benet.com

" > /var//usr/local/nginx/conf/nginx.conf

{server { listen 80; server_name yr.com;     #设置域名yr.com charset utf-8; access_log logs/yr.access.log;   #设置日志名 location / {  root /var/    #设置yr.com 的工作目录  index index.html index.php; } error_page 500 502 503 504 /50x.html; location = 50x.html{  root html; }}server { listen 80; server_name benet.com;     #设置域名benet.com charset utf-8;  access_log logs/benet.access.log;   location / {  root /var/index.html index.php; } error_page 500 502 503 504 /50x.html; location = 50x.html{  root html; } }  }

6.4重启服务,访问测试

systemctl restart nginx

浏览器访问

的 Nginx 虚拟主机

ifconfig ens33:0 192.168.80.11 netmask 255.255.255.0

vim /usr/local/nginx/conf/nginx.conf

{

server {

listen 192.168.80.10:80;     #设置监听地址192.168.80.10

server_name kgc.com;

charset utf-8;

access_log logs/kgc.access.log;

location / {

root /var/index.html index.php;

}

error_page 500 502 503 504 /50x.html;

location = 50x.html{

root html;

}

}

server {

listen 192.168.80.11:80;     #设置监听地址192.168.80.11

server_name benet.com;

charset utf-8;

access_log logs/benet.access.log;

location / {

root /var/index.html index.php;

}

error_page 500 502 503 504 /50x.html;

location = 50x.html{

root html;

}

}

}

systemctl restart nginx

浏览器访问

Nginx 虚拟主机

vim /usr/local/nginx/conf/nginx.conf

{

server {

listen 192.168.80.10:8080;     #设置监听 8080 端口

server_name kgc.com;

charset utf-8;

access_log logs/kgc.access.log;

location / {

root /var/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 benet.com;

charset utf-8;

access_log logs/benet.access.log;

location / {

root /var/index.html index.php;

}

error_page 500 502 503 504 /50x.html;

location = 50x.html{

root html;

}

}

}

systemctl restart nginx

浏览器访问

http://192.168.80.11:8080

http://192.168.80.11:8888

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:LDR6282双USB Type-C接口控制芯片,支持USB PD3.0协议
下一篇:技嘉给RTX 3080增加一个8针辅助供电接口
相关文章

 发表评论

暂时没有评论,来抢沙发吧~