nginx网站安装服务

news2024/11/25 6:30:34

nginx概述

  • 一款高性能、轻量级web服务软件
  • 稳定性高
  • 系统资源消耗低
  • 对HTTP并发连接的处理能力高
  • 单台物理服务器可支持30000~50000个并发请求

正向代理:通过代理服务器来访问资源,这种代理服务成为正向代理

反向代理:客户端与代理是无感知的,客户端不需要任何配置就可以访问,我们将请求发送给代理服务器,由反向代理服务器去选择目标服务器获取数据后返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址

负载均衡:将负载分发到不同服务器上

动静分离:把静态页面和动态页面由不同的服务器来解析

nginx高性能、高并发

nginx采用:多进程+异步非阻塞方式(io 多路复用 epoll)

请求的完整过程:

1.建立连接

2.读取请求,解析请求

3.处理请求

4.响应请求

请求的完整过程,对应到底层,就是:读写socket事件 

编译安装Nginx服务

1.关闭防火墙,将安装nginx所需软件包传到/opt目录下

root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0

2.安装依赖包

#nginx的配置及运行需要pcre、zlib、openssl等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make

3.创建运行用户、组(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)

useradd -M -s /sbin/nologin nginx

4.编译安装Nginx

[root@localhost opt]# ls
apache  nginx-1.22.0  nginx-1.22.0.tar.gz
[root@localhost opt]# cd nginx-1.22.0/
[root@localhost nginx-1.22.0]# ls
auto  CHANGES  CHANGES.ru  conf  configure  contrib  html  LICENSE  man  README  src

[root@localhost nginx-1.22.0]# ./configure \
> --prefix=/usr/local/nginx \   指定nginx的安装路径
> --user=nginx \                   #指定用户名
> --group=nginx \                 #指定组名
> --with-http_stub_status_module   启用 http_stub_status_module 模块以支持状态统计--

 
make -j2 && make install   编译安装


ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/		#让系统识别nginx的操作命令

5.检查、启动、重启、停止 nginx服务

nginx -t                                #检查配置文件是否配置正确
#启动
nginx   或者/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

#检查进程是否在运行

killall -0 进程名

#平滑升级
kill -USR2 <PID号>

 新版本升级:

[root@localhost ~]# cd /opt/nginx-1.24.0/

./configure \
> --prefix=/usr/local/nginx \
> --user=nginx \
> --group=nginx \
> --with-http_stub_status_module

make -j2 


[root@localhost nginx-1.24.0]# ls
auto     CHANGES.ru  configure  html     Makefile  objs    src
CHANGES  conf        contrib    LICENSE  man       README
[root@localhost nginx-1.24.0]# ls objs/
autoconf.err  nginx    ngx_auto_config.h   ngx_modules.c  src
Makefile      nginx.8  ngx_auto_headers.h  ngx_modules.o
[root@localhost nginx-1.24.0]# cd /usr/local/nginx/sbin/
[root@localhost sbin]# ls
nginx
[root@localhost sbin]# mv nginx nginx.bak
[root@localhost sbin]# ls
nginx.bak
[root@localhost sbin]# cd -
/opt/nginx-1.24.0
[root@localhost nginx-1.24.0]# ls
auto     CHANGES.ru  configure  html     Makefile  objs    src
CHANGES  conf        contrib    LICENSE  man       README

[root@localhost nginx-1.24.0]# cp objs/nginx /usr/local/nginx/sbin/nginx
[root@localhost nginx-1.24.0]# cd /usr/local/nginx/sbin/
[root@localhost sbin]# ls
nginx  nginx.bak
[root@localhost sbin]# nginx -V
nginx version: nginx/1.24.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) 
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
[root@localhost sbin]# cd /opt/nginx-1.24.0/

[root@localhost nginx-1.24.0]# ps aux | grep nginx
root      12870  0.0  0.0 112676   984 pts/1    S+   17:50   0:00 grep --color=auto nginx

[root@localhost nginx-1.24.0]# /usr/local/nginx/sbin/nginx.bak  #保证服务开启才能平滑在线升级
[root@localhost nginx-1.24.0]# ps aux | grep nginx
root      12885  0.0  0.0  20528   620 ?        Ss   17:52   0:00 nginx: master process /usr/local/nginx/sbin/nginx.bak
nginx     12886  0.0  0.0  23056  1388 ?        S    17:52   0:00 nginx: worker process
root      12888  0.0  0.0 112676   980 pts/1    R+   17:52   0:00 grep --color=auto nginx
[root@localhost nginx-1.24.0]# make upgrade
/usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
sleep 1
test -f /usr/local/nginx/logs/nginx.pid.oldbin
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`
[root@localhost nginx-1.24.0]# nginx -V  #看版本号
nginx version: nginx/1.24.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) 
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module

 6、添加 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表示给服务分配独立的临时空间
注意:启动、重启、停止命令全部要求使用绝对路径

设置相关权限

chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service

 日志格式设定

$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
$remote_user:用来记录客户端用户名称;
$time_local: 用来记录访问时间与时区;
$request: 用来记录请求的url与http协议;
$status: 用来记录请求状态;成功是200,
$body_bytes_sent :记录发送给客户端文件主体内容大小;
$http_referer:用来记录从哪个页面链接访问过来的;
$http_user_agent:记录客户浏览器的相关信息;
通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。

 

location常见配置指令,root、alias、proxy_pass
root(根路径配置):root /var/www/html
请求www.kgc.com/test/1.html,会返回文件/var/www/html/test/1.html

alias(别名配置):alias /var/www/html
请求www.kgc.com/test/1.html,会返回文件/var/www/html/1.html


 访问状态统计配置 

1.先使用命令/usr/local/nginx/sbin/nginx -V 查看已安装的 Nginx 是否包含 HTTP_STUB_STATUS 模块

cat /opt/nginx-1.12.0/auto/options | grep YES     #可查看 nginx 已安装的所有模块

想要关闭模块可以使用

configure  --without-http-cache

2.修改 nginx.conf 配置文件,指定访问位置并添加 stub_status 配置

3.重启服务,访问测试

 

 

Active connections:表示当前的活动连接数,即当前与 Nginx 服务器建立的连接数。
server accepts handled requests :表示已经处理的连接信息
三个数字依次表示服务器已接收的连接数;服务器成功处理的连接数;服务器累计处理的总请求数(在保持连接模式下,请求数量可能会大于连接数量)
Reading:表示当前正在从客户端读取数据的连接数。
Writing:表示当前正在向客户端写入数据的连接数。
Waiting:表示当前空闲并等待请求的连接数。

可 curl -Ls http://192.168.80.10/status 结合 awk与if 语句进行性能监控
查看并发量

使用脚本自动查看并发量

#!/bin/bash
while true
do

ACTIVECONN=$(curl -Ls 192.168.102.40/status | awk '/Active connections/{print $3}')

if [ $ACTIVECONN -gt 3 ];then
     echo "告警! 当前并发连接过高! 当前并发数为:$ACTIVECONN"
fi

sleep 10  #每10秒进行查看并发量
done

 基于授权的访问控制

1.生成用户密码认证文件

yum install -y httpd-tools  #安装相关软件


htpasswd -c /usr/local/nginx/userlist cx  创建用户
chown nginx /usr/local/nginx/userlist      设置权限
chmod 400 /usr/local/nginx/userlist

 

 

 location /status {
             stub_status on;
             access_log off;
             auth_basic "hellow world";
             auth_basic_user_file /usr/local/nginx/userlist;
             allow 192.168.102.40;     ##允许访问的客户端 IP
             deny all;                 #拒绝其它IP客户端访问    
        }

基于客户端的 Nginx 虚拟主机

 location /status {
             stub_status on;
             access_log off;
             auth_basic "hellow world";
             auth_basic_user_file /usr/local/nginx/userlist;
             allow 192.168.47.50;     ##允许访问的客户端 IP
             deny all;                 #拒绝其它IP客户端访问    
        }

 

 基于域名的 Nginx 虚拟主机

1.为虚拟主机提供域名解析

echo "192.168.47.50 www.accp.com www.zzbao.com" >> /etc/hosts

 2.为虚拟主机准备网页文档

3.修改Nginx的配置文件 

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

 server {
        listen       80;
        server_name  www.accp.com;

        charset koi8-r;

        access_log  logs/accp.com_access.log  main;

        location / {
            root   /var/www/html/accp;
            index  index.html index.htm;
        }



    server {
        listen       80;
        server_name  www.zzbao.com;

        charset koi8-r;

        access_log  logs/zzbao.com_access.log  main;

        location / {
            root  /var/www/html/zzbao;
            index  index.html index.htm;
        }



注意: 一定要记得查看nginx -t 看是否要改日志格式

                                  

 基于IP 的 Nginx 虚拟主机

1.创建虚拟网卡

[root@localhost conf]# ifconfig ens33:0 192.168.47.150/24
    server {
        listen   192.168.47.150:80;
        server_name  www.zzbao.com;

        charset koi8-r;

        access_log  logs/zzbao.com_access.log;

        location / {
            root  /var/www/html/zzbao;
            index  index.html index.htm;
        }

   server {
        listen     192.168.47.50:80;
        server_name  www.accp.com;

        charset koi8-r;

        access_log  logs/accp.com_access.log;

        location / {
            root   /var/www/html/accp;
            index  index.html index.htm;
        }

         

 基于端口的 Nginx 虚拟主机

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

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/599218.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Go LeetDay】总目录(1~83)

Leetcode Golang Day1~10 Golang每日一练(leetDay0001) 1. 两数之和 Two Sum 2. 两数相加 Add Two Numbers 3. 无重复字符的最长子串 Longest-substring-without-repeating-characters Golang每日一练(leetDay0002) 4. 寻找两个正序数组的中位数 Median of two sorted arra…

如何通过帮助文档来减少你的客服咨询量,提高工作效率

相信你的公司网站或者产品中总会设置一个“联系我们”按钮&#xff0c;让客户能够遇到问题随时能够找到客服人员并且快速解决&#xff0c;在创业初期&#xff0c;可能这样的模式没有问题&#xff0c;但是随着客户越来越多&#xff0c;客服的需求也随之增加&#xff0c;客服人员…

【iOS】--对象的底层结构

源码 先转一下源码 //#import <Foundation/Foundation.h> #import <objc/runtime.h>interface LGPerson : NSObject property (nonatomic, strong) NSString *KCName; endimplementation LGPersonendint main(int argc, const char * argv[]) {autoreleasepool {…

DVWA-XSS (Stored) Low/Medium/High低中高级别

「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 XSS Stroed 一、Low级别二、Medium级别三、Hign级别 这关是一个论坛功能&#xff0c;把用…

设计模式(六):结构型之代理模式

设计模式系列文章 设计模式(一)&#xff1a;创建型之单例模式 设计模式(二、三)&#xff1a;创建型之工厂方法和抽象工厂模式 设计模式(四)&#xff1a;创建型之原型模式 设计模式(五)&#xff1a;创建型之建造者模式 设计模式(六)&#xff1a;结构型之代理模式 目录 一、…

深入分析——Linux DMA Fence

目录 一 简介 二 基本原理 三 代码实现 3.1 Init 3.2 wait 3.3 signaling 3.4 callback 3.5 signaled 3.6 signal 3.7 refcount & release 四 Fence Status 一 简介 dma-fence是linux 内核中同步原语&#xff0c;它只有两种状态signaled和unsigned。因为其本身的…

华为OD机试之找出经过特定点的路径长度(Java源码)

找出经过特定点的路径长度 题目描述 无 输入描述 输入一个字符串&#xff0c;都是以大写字母组成&#xff0c;每个相邻的距离是 1&#xff0c; 第二行输入一个字符串&#xff0c;表示必过的点。 说明每个点可过多次。 输出描述 经过这些必过点的最小距离是多少 用例 输入 ANT…

OpenGL之坐标系统

文章目录 概述局部空间世界空间观察空间裁剪空间正射投影透视投影 进入3D代码 OpenGL希望在每次顶点着色器运行后&#xff0c;我们可见的所有顶点都为标准化设备坐标(Normalized Device Coordinate, NDC)。也就是说&#xff0c;每个顶点的x&#xff0c;y&#xff0c;z坐标都应该…

基于diffusers训练lora,AI换装

阿里云登录 - 欢迎登录阿里云&#xff0c;安全稳定的云计算服务平台欢迎登录阿里云&#xff0c;全球领先的云计算及人工智能科技公司&#xff0c;阿里云为200多个国家和地区的企业、开发者和政府机构提供云计算基础服务及解决方案。阿里云云计算、安全、大数据、人工智能、企业…

设计模式(四):创建型之建造者模式

设计模式系列文章 设计模式(一)&#xff1a;创建型之单例模式 设计模式(二)&#xff1a;创建型之工厂方法和抽象工厂模式 设计模式(三)&#xff1a;创建型之原型模式 设计模式(四)&#xff1a;创建型之建造者模式 目录 一、设计模式分类二、建造者模式1、概述2、结构3、实例…

Win10设置 Java 环境变量

文章目录 概要下载jdk安装jdk配置环境变量测试环境变量是否配置成功总结 概要 学习java开发首先需要安装jdk,并设置环境变量。 接下来就来介绍一下如何在 windows 10 系统中配置java环境变量 下载jdk https://download.oracle.com/java/17/latest/jdk-17_windows-x64_bin.exe…

C#,生信软件实践(06)——DNA数据库GenBank文件的详解介绍及解释器之完整C#源代码

1 GenBank 1.1 NCBI——美国国家生物技术信息中心&#xff08;美国国立生物技术信息中心&#xff09; NCBI&#xff08;美国国立生物技术信息中心&#xff09;是在NIH的国立医学图书馆&#xff08;NLM&#xff09;的一个分支。它的使命包括四项任务&#xff1a;1. 建立关于分…

LIBEVENT 框架

LIBEVENT 框架 LAMPlibevent特点:libevent的功能libevent官网安装步骤Linux下libevent主要API介绍libevent使用步骤libevent 编程案例LAMP 从LAMP说起: 是一个缩写,它指一组通常一起使用来运行动态网站或者服务器的自由软件 Linux - 操作系统Apache - 网页服务器MySQL - 数据…

Automatic Prompt Optimization with “Gradient Descent” and Beam Search

在“自然语言域”使用类似梯度下降的方法优化prompt 整篇文章比较精髓的思想在于 利用LLM本身去寻找prompt的瑕疵。将语言模型的输出 y ^ \hat{y} y^​与正确答案&#xff08;label&#xff09; y y y还有prompt p p p 一起送入LLM&#xff0c;并通过类似“What is wrong wi…

如果提取音乐的伴奏和人声,分享两个方法给大家!

音乐中的伴奏提取一直是许多音频爱好者关注的话题。在本文中&#xff0c;我们将介绍两种简单易用的方法&#xff0c;并且特别推荐一款记灵在线工具&#xff0c;它能够帮助你轻松提取音乐伴奏&#xff0c;并且支持批量处理&#xff01; 方法一&#xff1a;Audacity 首先&#…

centos7 编译bluez ARM版本及undefined reference to `g_thread_new‘

在我辛辛苦苦编译成功 glib 库后&#xff08;看我上一篇文章 centos7 glib2.0 arm版本的编译&#xff09;&#xff0c;以为可以顺利编译我的 bluez ARM 版本&#xff0c;结果出现了最后一个错误&#xff08;其中一个是私有库里的&#xff09;&#xff0c;如&#xff1a; 就是这…

英文论文(sci)解读复现【NO.15】学习聚合多尺度背景的实例分割在遥感图像

此前出了目标检测算法改进专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读发表高水平学术期刊中的 SCI论文&a…

基于customerId来实现

定义两个upstream,他们和service及route的关系如下&#xff1a; 这里我们使用 0、将下面的这个spring boot项目在192.168.19.50上进行部署 KongDemoApplication.java package com.example.kongdemo;import org.springframework.beans.factory.annotation.Value; import org…

8个升级到ChatGPT Plus的理由,不升级你就out了

​关注文章下方公众号&#xff0c;可免费获取AIGC最新学习资料 导读&#xff1a;ChatGPT Plus 是 OpenAI 聊天机器人的高级付费版本。以每月 20 美元的价格&#xff0c;该服务为您提供访问 GPT-4&#xff0c;您可以享有令人难以置信的稳定性和更快的响应时间。 本文字数&#…

i18n(国际化)代码简单实现

目录 i18n&#xff08;国际化&#xff09;是什么&#xff1f;如何实现 i18n&#xff08;国际化&#xff09;是什么&#xff1f; 各个国家都有各个国家的语言&#xff0c;如果网站需要让全世界的人使用&#xff0c;那就需要进行国际化功能开发 国际化我知道的一共有两种&#…