CentOS7源码安装Nginx及Nginx基本管理设置

编程

CentOS7 安装 参考文档

CentOS7最小安装后初始化安装工具

  1:yum install net-tools 参考文档

     2:源码安装wget 参考文档 或者执行 yum -y install wget

 

CentOS7 源码安装包步骤

  一:Nginx 安装步骤

    1-1:源码下载地址 http://nginx.org/en/download.html

      执行命令:wget wget http://nginx.org/download/nginx-1.21.3.tar.gz

    1-2:解压下载的文件 

      执行命令:tar  -zxvf   {压缩文件名}.tar.gz

    1-3:配置configure 检测安装及依赖信息

      查看命令文档执行:./configure --help

      

 

       先安装编译器

      执行:sudo yum -y install gcc

      再次执行:./configure 进行配置 如下图:

      

 

       检测到有依赖包没有装,根据提示去安装 pcre

      执行命令:sudo yum -y install pcre-devel

      再次执行:./configure  如下图:

      

 

      根据提示继续安装依赖包:

     执行命令:sudo yum -y install zlib-devel

     一直重复执行./configure 直到检测到没有依赖项就说明检测通过了,如下图:

     

 

      检测并指定安装路径命令:./configure --prefix=/usr/local/nginx

、    

 

     1-4:执行make指令:源码生成可执行文件,中途不能出现error

      

 

 

    1-5:安装 make install

      执行安装命令:sudo make install

    

   测试:

     1:进入:/usr/local/nginx 执行:./sbin/nginx

     2:在浏览器中输入:http://localhost

     3:安装一个文本浏览器测试 yum -y install elinks

      

   

  Nginx相关目录文件

    nginx path prefix:/usr/local/nginx (Nginx安装目录)

    nginx binary file:/usr/local/nginx/sbin/nginx(Nginx启动目录)

    nginx moduless path:/usr/local/nginx/modules(Nginx相关模块目录)

    nginx configuration prefix:/usr/local/nginx/conf(Nginx配置文件目录) 

    nginx configuration file:/usr/local/nginx/conf/nginx.con(nginx启动配置文件)

    nginx pid file:/usr/local/nginx/logs/nginx.pid(nginx进程号)

    nginx error log file:/usr/local/nginx/logs/error.log:(nginx错误日志文件)

    nginx http access log file:/usr/local/nginx/logs/access.log(访问日志文件)

   

  先关闭防火墙 (测试需要在局域网中访问)

    setenforce 0
    systemctl stop firewalld
    systemctl disable firewalld

 

     Nginx添加到环境变量

    使用软连接将nginx链接到/usr/local/sbin

    ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin || /usr/local/sbin/ | grep "nginx" 

               

    显示当前环境变量PATH

      echo $PATH

    编辑.bash_profile文件

      vim ~/.bash_profile

    在.bash_profile文件末尾加入以下内容

      export PATH=$PATH:/usr/local/nginx/sbin

    

    引用.bash_profile文件

      source ~/.bash_profile

    使用nginx命令

    # 启动nginx

      nginx

    # 停止nginx

      nginx -s quit

  

nginx部分配置

# 启动该程序的默认程序

#user nobody;

# 一个主进程和多个工作进程。这里定义的是主进程数量

worker_processes 4;

# 全局错误日志的位置及日志格式

#error_log logs/error.log;

#error_log logs/error.log notice;

#error_log logs/error.log info;

#pid logs/nginx.pid;

events {

# 每个工作进程最大并发数

worker_connections 1024;

}

# 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; # 全局日志路径

# $remote_addr与$http_x_forwarded_for用以记录客户端ip地址

# $remote_user:记录客户端名称

# $time_local:记录访问时间与时区

# $request:记录访问状态 200成功

# $body_bytes_sent:记录发送给客户端文件主体内容大小

# $http_referer:记录从哪个页面链接访问过来的

# $http_user_agent:记录客户端浏览器相关信息

# sendfie指令指定nginx是否调用sendfile函数(zero copy 方式)来输出文件

sendfile on;

# 允许或禁止使用socke的TCP_CORK的选项仅在使用sendfile的时候使用

#tcp_nopush on;

# 长连接超时时间

#keepalive_timeout 0;

keepalive_timeout 65;

# 开启压缩

#gzip on;

# 默认网站 配置虚拟主机

server {

# 虚拟主机使用的端口

listen 80;

# 主机域名

server_name localhost;

# 支持的字符集

charset utf-8;

#访问日志路径

#access_log logs/host.access.log main;

# 定义web根路径

location / {

# 根目录路径

root html;

# 索引页面

index index.html index.htm;

}

# 访问控制目录

location /a {

# 允许访问

allow 127.0.0.0;

# 不允许

deny all;

# return404;

return http://www.baidu.com;

}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html

# 根据错误码返回对应的页面

error_page 500502503504 /50x.html;

#

location = /50x.html {

root html;

}

}

}

View Code

  

  如果修改了配置文件先进入nginx目录中:cd /usr/local/nginx ,在执行:./sbin/nginx -g ./conf/nginx.conf 检测配置文件是否正确

  修改配置重启nginx 方式一:

    先执行:killall nginx

    在执行:cd /usr/local/nginx 执行:./sbin/nginx

  修改配置重启nginx 方式一:

    killall -s HUP nginx (重新加载配置文件)

  nginx访问目录配置

    注意:访问控制目录中的location /a{} 这里的location值得就是 web根路径中的root路径

    # 定义web根路径

location / {

# 根目录路径

root html;

# 索引页面

index index.html index.htm;

}

# 访问控制目录

location /a {

# 允许访问

allow 127.0.0.0;

# 不允许

deny all;

# return404;

return http://www.baidu.com;

}

 Nginx日志管理

   Nginx访问日志主要有两个参数控制

    1:log_format 用来定义日志格式,可以定义多种日志格式,取不同名字即可

    2:access_log 用来指定日志文件路径及使用何种日志格式记录日志

   

  log_format格式变量:

    # access_log logs/access.log main; # 全局日志路径

    # $remote_addr与$http_x_forwarded_for用以记录客户端ip地址

  `   # $remote_user:记录客户端名称
    # $time_local:记录访问时间与时区
    # $request:记录访问状态 200成功
    # $body_bytes_sent:记录发送给客户端文件主体内容大小
    # $http_referer:记录从哪个页面链接访问过来的
    # $http_user_agent:记录客户端浏览器相关信息

   

 

   自定义格式为json格式:  

   # 自定义日志格式

# log_format default_fmt "[$time_local] $remote_addr "$request""

# 自定义json日志格式

log_format default_fmt_json "{"@timestamp":"$time_local","

""client_ip":"$remote_addr","

""request":"$request","

""status":"$status","

""bytes":"$body_bytes_sent","

""x_forwarded":"$http_x_forwarded_for","

""referer":"$http_referer""

"}";

  两种格式测试效果如下:

    

 

Nginx图片防盗链

   

        # 防盗链(只针对b目录)

# location /b {

# 项目中以下文件后缀

location ~* .(png|gif|bmp|jpg|jpeg)$ {

valid_referers none blocked *.ticp.net;

if ($invalid_referer){

return403;

}

}

 

Nginx虚拟主机

    一个web服务器软件默认情况下只能发布一个web,因为一个web分享出去需要三个条件(IP、Port、Domain name)

    虚拟主机就是把一台物理服务器划分成多个虚拟服务器,每个虚拟主机都可以有独立的域名和独立的目录。

    

 

 

  1:基于IP的虚拟主机

    准备:

      1:在nginx根目录下准备两个网站如:

        /usr/local/nginx/html/web1/index.html

        /usr/local/nginx/html/web1/index.html

      2:添加一个子IP,使用逻辑网卡添加一个 自网卡的方式

        添加网卡:ifconfig ens33:1 192.168.0.131/24 up

        删除网卡:ifconfig ens33:1 down

      

 

   基于IP虚拟主机nginx配置信息 (/usr/local/nginx/conf/nginx.conf)

    

user centos;

worker_processes 4;

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

log_format default_fmt_json "{"@timestamp":"$time_local","

""client_ip":"$remote_addr","

""request":"$request","

""status":"$status","

""bytes":"$body_bytes_sent","

""x_forwarded":"$http_x_forwarded_for","

""referer":"$http_referer""

"}";

sendfile on;

keepalive_timeout 65;

server {

listen 192.168.0.130:80;

server_name localhost;

charset utf-8;

access_log logs/host.access.log default_fmt_json;

location / {

root html/web1;

index index.html index.htm;

}

}

server {

listen 192.168.0.131:80;

server_name localhost;

charset utf-8;

access_log logs/host.access.log default_fmt_json;

location / {

root html/web2;

index index.html index.htm;

}

}

}

  重启nginx 测试 (先:killall nginx 在:../sbin/nginx )

   

 

 

  

 

   2:基于端口的虚拟主机(只需要修改配置即可)

user centos;

worker_processes 4;

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

log_format default_fmt_json "{"@timestamp":"$time_local","

""client_ip":"$remote_addr","

""request":"$request","

""status":"$status","

""bytes":"$body_bytes_sent","

""x_forwarded":"$http_x_forwarded_for","

""referer":"$http_referer""

"}";

sendfile on;

keepalive_timeout 65;

server {

listen 80;

#server_name localhost;

charset utf-8;

access_log logs/host.access.log default_fmt_json;

location / {

root html/web1;

index index.html index.htm;

}

}

server {

listen 8080;

#server_name localhost;

charset utf-8;

access_log logs/host.access.log default_fmt_json;

location / {

root html/web2;

index index.html index.htm;

}

}

}

View Code

    

 

     测试

    

 

   3:基于域名的虚拟主机配置文件

    

 

Nginx反向代理

    代理服务器,客户在发送请求的时候,不会直接发送给目的主机,而是先发送给代理服务器,代理服务器接受客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务器硬盘中,在发送给客户机

    

 

 

    应用场景:

        堡垒机场景

        内网服务器发布场景

        缓存场景

        

 

 

        

    

    代理服务器原理:

           

 

     代理配置文件  

user centos;

worker_processes 4;

events {

worker_connections 1024;

}

http {

include mime.types;

default_type application/octet-stream;

log_format default_fmt_json "{"@timestamp":"$time_local","

""client_ip":"$remote_addr","

""request":"$request","

""status":"$status","

""bytes":"$body_bytes_sent","

""x_forwarded":"$http_x_forwarded_for","

""referer":"$http_referer""

"}";

sendfile on;

keepalive_timeout 65;

server {

listen 80;

#server_name localhost;

charset utf-8;

access_log logs/host.access.log default_fmt_json;

location / {

proxy_pass http://wendj.ticp.net;

}

}

}

View Code

    

Nginx限速

      Nginx官方版本限制IP的链接和并发分别有两个模块

        limit_req_zone:用来限制单位时间内的请求数,即速率限制。

        limit_req_conn:用来限制同一时间连接数,即并发限制。

         

 

   Nginx中URL重写

      rewrite模块(ngx_http_rewrite_module)

      Rewrite功能是Nginx服务器提供的一个重要功能。几乎所有的web产品必备技能,用于实现URL重写。URL重写是非常常用的功能,比如它可以在我们改变网站结构后,不需要客户端修改原来的书签,也不需要其它网站吸怪对我网站的友情链接,还可以在一定程度上提高网站安全性。

      Nginx服务器Rewrite功能是依赖于PCRE(PerlCompatibleRegularExpression)

      

Nginx优化

    Nginx是主进程+工作进程模型

    worker_processes 1:工作进程数量,按CPU的总核心调整

    worker_cpu_affinity 0001 0100 1000:CPU的亲和力

    worker_connections 1024:一个工作进程的并发数

  查看CPU核数指令:cat /proc/cpuinfo |grep "flags"|wc -l

    

 

   统计nginx连接数:netstat -antpl|grep nginx|grep ESTABLISHED|wc -l

   

  Nginx长连接

     http协议属于TCP协议

     优化目标:减少三次握手和四次挥手次数

     keepalive_timeout 5:长连接时间

     keepalive_requests 8192:每个长连接接受最大请求数

   Nginx数据压缩

     gzip on;      # 开启压缩

     gzip_proxied any;  # 任何时候都压缩

     gzip_min_length 1k;  # 启用压缩最小文件,小于设置的不会被压缩

        gzip_buffers 4 8k;  # 压缩的缓存区大小

     gzip_comp_level 6;  # 压缩级别1-9数字越大压缩的越好,也越占CPU时间

     gzip_types text/plain text/css application/x-javascript application/javascript application/xml;  # 压缩文件类型

   Nginx客户端缓存

     location ~* .(png|gif|jpg|jpeg)${

     expires 1h;

     }

  

  Nginx参考文章

 

  

以上是 CentOS7源码安装Nginx及Nginx基本管理设置 的全部内容, 来源链接: utcz.com/z/520008.html

回到顶部