0
点赞
收藏
分享

微信扫一扫

Nginx的搭建和优化

zidea 2022-05-25 阅读 87

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程序对外进行服务,也可以支持http代理服务器对外进行服务。
  • Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比较好。
  • 作为邮件代理服务器:最早开发这个产品的目的之一也是作为邮件代理服务器。

1.3Nginx和Apache最核心的区别

  • apache是同步多进程模型,一个连接对应一个进程,nginx是异步的,多个连接可以对应一个进程。
  • Nginx处理静态文件好,耗费内存少,只适合静态和反向。
  • Apache在处理动态有优势,
  • nginx并发性比较好,CPU占用内存低,如果rewrite频繁,选用apache最佳。
  • 总的来说,apache依然是大部分公司的首选。

二.Nginx的编译安装

2.1关闭防火墙,安装依赖关系包

1. #关闭防火墙

[root@localhost opt]#systemctl stop firewalld

[root@localhost opt]#setenforce 0

2. #安装依赖关系包

[root@localhost opt]#yum -y install pcre-devel zlib-devel gcc gcc-c++ make

Nginx的搭建和优化_html

2.2新建用户 和组便于管理

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

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

Nginx的搭建和优化_php_02

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

#切换至opt目录,将下载好的压缩包传进来

[root@localhost opt]#cd /opt

[root@localhost opt]#ls

nginx-1.12.0.tar.gz

#解压文件

[root@localhost opt]#tar -zxf nginx-1.12.0.tar.gz

[root@localhost opt]#ls

nginx-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-http_stub_status_module      //启用此模块支持状态统计

#安装

[root@localhost nginx-1.12.0]#make && make install -j4

Nginx的搭建和优化_php_03

Nginx的搭建和优化_nginx_04

make&& make install

Nginx的搭建和优化_php_05

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 nginx

LISTEN     0      128          *:80                       *:*                   users:(("nginx",pid=9123,fd=6),("nginx",pid=9122,fd=6))

Nginx的搭建和优化_nginx_06

2.5停止nginx

 #先查看nginx的PID号

[root@localhost sbin]#cat /usr/local/nginx/logs/nginx.pid

9122

#直接杀死

kill -3 <PID号>

[root@localhost sbin]#kill -3 9122

#就查不到进程了

[root@localhost logs]#ss -ntap|grep nginx

#一定要杀父进程,杀死子进程是没用的

#查进程号

[root@localhost logs]#lsof -i :80

COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

nginx   10298  root    6u  IPv4  68323      0t0  TCP *:http (LISTEN)

nginx   10299 nginx    6u  IPv4  68323      0t0  TCP *:http (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=nginx

After=network.target

[Service]

Type=forking

PIDFile=/usr/local/nginx/logs/nginx.pid

ExecStart=/usr/local/nginx/sbin/nginx

ExecReload=/usr/bin/kill -s HUP $MAINPID

ExecStop=/usr/bin/kill -s QUIT $MAINPID

PrivateTmp=true

[Install]

WantedBy=multi-user.target

##磁盘上的ngin服务更改,运行'systemctl daemon-reload'重新加载单元。

[root@localhost system]#systemctl daemon-reload

##启动服务

[root@localhost system]#systemctl start nginx

Nginx的搭建和优化_html_07

2.7查看nginx版本信息

  1. #nginx -v
  2. nginx version: nginx/1.12.0

Nginx的搭建和优化_nginx_08

3.Nginx配置文件

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

3.1全局配置

#user nobody;      #运行用户,若编译时未指定则默认为 nobody

worker_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 个连接

}

  1. 如提高每个进程的连接数还需执行“ulimit -n 65535”命令临时修改本地每个进程可以同时打开的最大文件数。
  2. 在Linux平台上,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄)。
  3. 可使用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 { }”界定标记,包括访问日志、HTTP 端口、网页目录、默认字符集、连接保

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

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

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;   #访问日志位置

 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 www.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-http_stub_status_module 来启用此模块支持,可以使用命令

可以使用命令/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.conf

events {

   use epoll;

   worker_connections  1024;

}

server {

       listen       80;

       server_name  www.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 httpd-tools

htpasswd -c /usr/local/nginx/passwd.db zhangsan

chown nginx /usr/local/nginx/passwd.db

chmod 400 /usr/local/nginx/passwd.db

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

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

server {

 location / {

  ##添加认证配置##

  auth_basic "secret";    #设置密码提示框文字信息

  auth_basic_user_file /usr/local/nginx/passwd.db;

 }

}

4.3重启服务,访问测试

nginx -t

systemctl restart nginx

4.4浏览器访问 http://192.168.204.129

5.基于客户端的访问控制

访问控制规则如下:

deny IP/IP 段:拒绝某个 IP 或 IP 段的客户端访问。

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

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

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

server {

 location / {

  ##添加控制规则##

  allow 192.168.204.130;      #允许访问的客户端 IP

  deny all;        #拒绝其它IP客户端访问

}

}

systemctl restart nginx

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

6.1虚拟主机提供域名解析

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

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

mkdir -p /var/www/html/benet

mkdir -p /var/www/html/kgc

echo "<h1>www.kgc.com</h1>" > /var/www/html/kgc/index.html

echo "<h1>www.benet.com</h1>" > /var/www/html/benet/index.html

6.3修改Nginx的配置文件

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

http {

server {

 listen 80;

 server_name www.yr.com;     #设置域名www.yr.com

 charset utf-8;

 access_log logs/www.yr.access.log;   #设置日志名

 location / {

  root /var/www/html/yr;     #设置www.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 www.benet.com;     #设置域名www.benet.com

 charset utf-8;

 access_log logs/www.benet.access.log;  

 location / {

  root /var/www/html/benet;

  index index.html index.php;

 }

 error_page 500 502 503 504 /50x.html;

 location = 50x.html{

  root html;

 }

}  

}

6.4重启服务,访问测试

systemctl restart nginx

浏览器访问

http://www.yr.com

http://www.benet.com

7.基于IP 的 Nginx 虚拟主机

ifconfig ens33:0 192.168.80.11 netmask 255.255.255.0  

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

http {

server {

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

 server_name www.kgc.com;

 charset utf-8;

 access_log logs/www.kgc.access.log;  

 location / {

  root /var/www/html/kgc;

  index 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 www.benet.com;

 charset utf-8;

 access_log logs/www.benet.access.log;  

 location / {

  root /var/www/html/benet;

  index index.html index.php;

 }

 error_page 500 502 503 504 /50x.html;

 location = 50x.html{

  root html;

 }

}  

}

systemctl restart nginx

浏览器访问

http://192.168.80.10

http://192.168.80.11

8.基于端口的 Nginx 虚拟主机

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

http {

server {

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

 server_name www.kgc.com;

 charset utf-8;

 access_log logs/www.kgc.access.log;  

 location / {

  root /var/www/html/kgc;

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

 charset utf-8;

 access_log logs/www.benet.access.log;  

 location / {

  root /var/www/html/benet;

  index 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




举报

相关推荐

0 条评论