Linux 环境安装Nginx—源码和Dokcer两种安装方式

news2024/11/25 20:32:59

一、源代码编译安装Nginx

1.下载最新nginx源码

以nginx-1.25.3.tar.gz为例:

可以使用命令(联网):curl -O http://nginx.org/download/nginx-1.25.3.tar.gz或在官网下载.tar.gz

2.解压缩

tar -zxvf nginx-1.25.3.tar.gz
cd nginx-1.25.3/

3.安装依赖模块

yum install pcre 
yum install pcre-devel

4.配置源代码

./configure
或  ./configure --without-http_gzip_module

5.编译

make

6.安装

make install

7.启动nginx

①切到nginx的sbin目录下输入:
启动:./nginx
加载:./nginx -s reload
或②/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

ps:关闭nginx:./nginx -s stop

或③执行启动脚本(./op_nginx.sh start)

#!/bin/sh
# ./op_nginx.sh start 启动 stop 停止 restart 重启 status 状态 monitor 监控(未启动->自动重启)

APP_HOME=/usr/local/nginx
LOG_PATH=$APP_HOME/logs/$AppName.log
AppName2=nginx
AppName=/usr/local/nginx/sbin/nginx
opUser=root
RE_LOG_HOME=/home/data/monitorlog/crontab
RE_LOG_FILE=$RE_LOG_HOME/$(date +%F)/$(date +%F)_restart.txt
STATE_HOME=/home/data/monitorlog/component-status
STATE_FILE=$STATE_HOME/$AppName2

#variable
##nginx安装路径
nginx_path=/usr/local/nginx
##nginx脚本启动路径
nginxd=$nginx_path/sbin/nginx
##nginx服务启动后存放PID的文件
nginx_pid_file=$nginx_path/logs/nginx.pid

if [ `whoami` != "$opUser" ];then
    echo -e " only $opUser can run me"
    exit 1
fi

if [ "$1" = "" ];
then
    echo -e "\033[0;31m 未输入操作名 \033[0m  \033[0;34m {start|stop|restart|status|monitor} \033[0m"
    exit 1
fi

if [ "$AppName" = "" ];
then
    echo -e "\033[0;31m 未输入应用名 \033[0m"
    exit 1
fi

if [ ! -d "$RE_LOG_HOME/$(date +%F)/" ];
then
    mkdir $RE_LOG_HOME/$(date +%F)
fi

#调用shell的函数库
if [ -f /etc/init.d/functions ];then
  . /etc/init.d/functions
else
  echo "not find file:/etc/init.d/functions"
  eixt 1
fi

#对nginx PID脚本文件进行判断
if [ -f $nginx_pid_file ];then
  pid=`cat $nginx_pid_file`
  nginx_process_num=`ps -ef  | grep $pid | grep -v "grep" | wc -l`
fi

#函数部分
##Nginx的启动函数
start () {
##如果nginx启动则报错
if [ -f $nginx_pid_file ] && [ $nginx_process_num -ne 0 ];then
  echo "Nginx服务已经启动"
else
##如果pid文件存在,但是没有进程,说明上一次非法关闭了nginx,造成pid文件没有自动删除,所以启动nginx之前先删除旧的pid文件
  if [ -f $nginx_pid_file ] && [ $nginx_process_num -eq 0 ];then
    rm -f $nginx_pid_file
    action "nginx start" $nginxd
  fi
  action "nginx start" $nginxd
fi
}

##Nginx关闭函数
stop () {
##如果Nginx服务没有启动,则提示服务没有启动
if [ -f $nginx_pid_file ] && [ $nginx_process_num -eq 0 ];then
  echo "Nginx服务没有启动"
  exit 2
else
  action "nginx stop" killall -s QUIT nginx
  rm -f $nginx_pid_file
fi
}

##Nginx重启函数
restart () {
stop
sleep 1
start
if [ $? -eq 0 ];then
  action "nginx 重启完成"
fi
}

##重新读取配置文件,不会更改pid
reload () {
if [ -f $nginx_pid_file ] && [ $nginx_process_num -ne 0 ];then
  action "nginx reload" killall -s HUP nginx
else
  echo "Nginx没有启动"
fi
}

##查看Nginx启动状态
status () {
tmp=`mktemp nginx.XXXX`
curl -s -I 127.0.0.1 1> $tmp
#curl -I 127.0.0.1 > $tmp &>/dev/null
sed -i "s/\r//" $tmp
val=`grep "HTTP" $tmp | cut -d ' ' -f3`
if [ "$val" == "OK" ];then
  echo "Nginx start"
else
  echo "Nginx stop"
fi
rm -f $tmp
}

function monitor()
{
    PID=`ps -ef |grep java|grep $AppName2|grep -v grep|wc -l`
    if [ $PID != 0 ];then
        echo "$AppName2 is running..."
        echo $(date +%Y-%m-%d%n%H:%M:%S)_running > $STATE_FILE
    else
	start
        echo "$AppName2 is not running,and restarting..."
        # 重启保存到日志
        echo $(date +%Y-%m-%d%n%H:%M:%S)_notrunning > $STATE_FILE
        echo $(date +%Y-%m-%d%n%H:%M:%S) >> $RE_LOG_HOME/$(date +%F)/$(date +%F)_restart.txt
        echo "$AppName is not running,and restarting..." >> $RE_LOG_HOME/$(date +%F)/$(date +%F)_restart.txt
    fi
}

case $1 in
    start)
    start;;
    stop)
    stop;;
    restart)
    restart;;
    status)
    status;;
    monitor)
    monitor;;
    *)
esac
8.浏览器访问

ps:防火墙开放端口

如下表示成功。

二、Docker安装Nginx(确保已安装Docker)

1.nginx.conf
#user  nobody;
worker_processes  4;

error_log   /usr/local/nginx/logs/error.log;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

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;

    client_max_body_size 200m;
    client_header_buffer_size 10k;
    large_client_header_buffers 20 10k;

    access_log /usr/local/nginx/logs/access.log ;

    sendfile        on;
    #tcp_nopush      on;

    keepalive_timeout  65;
    keepalive_requests 100000;
    #gzip  on;

    upstream server_list {
        server IP地址1:端口;
	    server P地址2:端口;
   } 

    server {
        listen       8080;
        server_name  域名或ip地址;

        charset utf-8;

        access_log  /usr/local/nginx/logs/host.access.log;
        
        #对 / 所有做负载均衡+反向代理
        location / {
           # root   html;
           # index  index.html index.htm;
	        proxy_pass http://server_list;

            proxy_redirect off;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_read_timeout 300;
            proxy_send_timeout 300;
            proxy_connect_timeout 300;
        }
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
2.nginx镜像上传到服务器

2.1访问 dockerhub 查找所需的镜像版本并下载(docker pull nginx)

2.2上传镜像

ps:确保nginx安装目录中有如下内容:

3.nginx安装脚本

在服务器上安装和启动(install_nginx.sh)

#!/bin/bash

##########################
# nginx-docker 安装脚本 #
##########################

WORK_PATH=/home/data/install_pkg
PKG_PATH=$WORK_PATH/nginx

#检查安装目录
if [ ! -d $PKG_PATH ];
then
    echo -e "${PKG_PATH} 缺失,结束进程"
    exit 1
fi

#docker 导入tar包
docker load < $PKG_PATH/nginx-1.25.3.tar

#新建nginx目录 注册配置文件
mkdir -p /home/data/nginx
cd /home/data/nginx
cp -rf $PKG_PATH/nginx.conf ./

#docker启动nginx
docker run -d --restart always \
    -p 9001:80 \
    --name nginx \
    -v /home/data/nginx/nginx.conf:/etc/nginx/nginx.conf \
    -v /home/data/nginx/conf.d:/etc/nginx/conf.d \
    -v /home/data/nginx/html:nginx:/usr/share/nginx/html \
    nginx:1.25.3

echo nginx installed.
docker ps | grep nginx

-v:挂载配置文件、html 目录到宿主机;冒号前为宿主机文件路径,冒号后为挂载到容器中的路径  

三、nginx配置注意事项

1.配置nginx.service(即配置systemctl启动服务

使用源码安装nginx的,可以添加该配置并放到/usr/lib/systemd/system

[Unit]
Description=nginx service
After=network.target

[Service]
Type=forking
#PIDFile=/var/run/nginx.pid #nginx.conf设置pid位置
ExecStart=/usr/local/nginx/sbin/nginx  #启动命令
ExecReload=/usr/local/nginx/sbin/nginx -s reload  #重启命令
ExecStop=/usr/local/nginx/sbin/nginx -s quit      #停止命令
PrivateTmp=true

[Install]
WantedBy=multi-user.target

2.导入3万条数据会报如下错误,因为nginx请求体默认是1m

可在nginx.conf中加上client_max_body_size 10m;

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

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

相关文章

动态菜单设计

查询当前用户下的菜单权限 思路&#xff1a;根据用户id 左关联表 查询出对应的菜单选项 查询SQL select distinct-- 菜单表 去除重复记录sys_menu.id,sys_menu.parentId, sys_menu.name from -- 权限表sys_menu-- 角色与权限表 菜单表id 角色菜单表的菜单id left j…

数据分析之Power BI

POWER QUERY 获取清洗 POWER PIVOT建模分析 如何加载power pivot 文件-选项-加载项-com加载项-转到 POWER VIEW 可视呈现 如何加载power view 文件-选项-自定义功能区-不在功能区中的命令-新建组-power view-添加-确定 POWER MAP可视地图

Redis 6.0.8版本下载

简介&#xff1a;Java领域优质创作者楠木 分享Java项目、简历模板、学习资料、面试题库 想必大家在下载redis之前已经逛了很多教程了&#xff0c;可能不尽如意&#xff0c;找不到自己的想要的版本。既然刷到了我的这条博客&#xff0c;说明你是幸运的&#xff01; Redis6.0.8的…

k8s1.28.8版本配置prometheus监控告警

文章目录 官方架构图组件的具体介绍kube-prometheus包含的组件简介&#xff1a;文件存储路径&#xff1a; 结构分析官网自带的一些规则自己总结流程 1-创建规则磁盘使用率报警规则 详解上面rule流程Alertmanagerg查看 2-报警接收器2.1-邮件报警修改Alertmanager配置查看现有的s…

【深耕 Python】Data Science with Python 数据科学(2)jupyter-lab和numpy数组

关于数据科学环境的建立&#xff0c;可以参考我的博客&#xff1a;【深耕 Python】Data Science with Python 数据科学&#xff08;1&#xff09;环境搭建 Jupyter代码片段1&#xff1a;简单数组的定义和排序 import numpy as np np.array([1, 2, 3]) a np.array([9, 6, 2, …

flume配置文件后不能跟注释!!

先总结&#xff1a;Flume配置文件后面&#xff0c;不能跟注释&#xff0c;可以单起一行写注释 报错代码&#xff1a; [ERROR - org.apache.flume.SinkRunner$PollingRunner.run(SinkRunner.java:158)] Unable to deliver event. Exception follows. org.apache.flume.EventDel…

AI的“换脸“魔术,究竟是弊大于利还是利大于弊?

公众号&#xff1a;【可乐前端】&#xff0c;每天3分钟学习一个优秀的开源项目&#xff0c;分享web面试与实战知识&#xff0c;也有全栈交流学习摸鱼群&#xff0c;期待您的关注! 每天3分钟开源 hi&#xff0c;这里是每天3分钟开源&#xff0c;很高兴又跟大家见面了&#xff0…

Rsyslog 日志集中管理实验

1.使用 进行日志集中管理 C/S 架构&#xff1a;客户端将其日志上传到服务器端&#xff0c;通过对服务器端日志的查询&#xff0c;来实现对其他客户端的日志进行集中管理 2.两台机器&#xff1a; &#xff08;server&#xff09;host-5(192.168.1.2)<------------>(192…

【51单片机入门记录】Onewire单总线协议 温度传感器DS18B20概述

一、温度传感器DS18B20概述 &#xff08;1&#xff09;数字化温度传感器 美国DALLAS半导体公司的数字化温度传感器DS1820是世界上第一片支持“一线总线”接口的温度传感器。一线总线独特而且经济的特点&#xff0c;使用户可轻松地组建传感器网络&#xff0c;为测量系统的构建…

Redis与数据库的一致性

Redis与数据库的数据一致性 在使用Redis作为应用缓存来提高数据的读性能时&#xff0c;经常会遇到Redis与数据库的数据一致性问题。简单来说&#xff0c;就是同一份数据同时存在于Redis和数据库&#xff0c;如何在数据更新的时候&#xff0c;保证两边数据的一致性。首先&#…

博士科研最好用的科研绘图工具有哪些?

博士科研最好用的科研绘图工具有哪些&#xff1f; 1 chiplot 网址&#xff1a;chiplot ChiPlot是一个功能强大、易于使用的在线图表和数据可视化工具。它提供了多种图表类型和交互性&#xff0c;帮助用户轻松创建精美的图表&#xff0c;并从中获取有价值的信息。 &#xff0…

精准防灾新篇章:GIS与Python机器学习技术在地质灾害风险评价与信息化建库中的前沿应用

结合项目实践案例和科研论文成果进行讲解。入门篇&#xff0c;ArcGIS软件的快速入门与GIS数据源的获取与理解&#xff1b;方法篇&#xff0c;致灾因子提取方法、灾害危险性因子分析指标体系的建立方法和灾害危险性评价模型构建方法&#xff1b;拓展篇&#xff0c;GIS在灾害重建…

C语言刷题(20)

指针笔试题 笔试题1&#xff1a; int main() {int a[5] { 1, 2, 3, 4, 5 };int *ptr (int *)(&a 1);printf( "%d,%d", *(a 1), *(ptr - 1));return 0; } //程序的结果是什么&#xff1f; *(a 1)等同于a[1]&#xff0c;第一个是2&#xff0c;a的类型是int […

SQL映射文件

一、SQL映射的xml文件 1.1 mapper元素 二、select 三、别名与Java映射 四、resultMap 啊

类模板成员函数的类外实现

能够掌握类模板中的成员函数的类外实现&#xff1a; #include <iostream> #include <Windows.h> #include <string>using namespace std;template<typename T1, typename T2> class Person { public:T1 m_Name;T2 m_Age;Person(T1 name, T2 age);void…

动态规划——简单多状态专题

一、按摩师&#xff08;打家劫舍 | &#xff09; 1.链接 面试题 17.16. 按摩师 - 力扣&#xff08;LeetCode&#xff09; 2.描述 3.思路 4.参考代码 class Solution { public:int massage(vector<int>& nums) {int n nums.size();if(n 0){return 0;}vector<…

整理git上的模板框架

vite-vue3.0-ts-pinia-uni-app 技术栈的app框架 功能&#xff1a;基于 uni-app&#xff0c;一端发布多端通用&#xff0c;目前已经适配 H5、微信小程序、QQ小程序、Ios App、Android App。 taro3vue3tsnutuipinia taro3 框架小程序跨端平台 vue3.0-element-vite-qiankun 后台…

vue3+threejs新手从零开发卡牌游戏(十四):调整卡组位置,添加玩家生命值HP和法力值Mana信息

由于之前的卡组位置占了玩家信息的位置&#xff0c;所以这里将它调整到site区域&#xff1a; 修改game/site/p1.vue&#xff0c;在site右下角添加一个卡组区域&#xff1a; // 初始化己方战域 const init () > {let sitePlane scene.getObjectByName("己方战域Plan…

【干货分享】OpenHarmony轻量系统适配方案

1. 简介 本文在不改变原有系统基础框架的基础上&#xff0c; 介绍了一种OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;轻量系统适配方案。 本方案使用的是 OpenHarmony v3.2 Release版本源码。 2. 方案设计 本文使用的硬件模块的主要特性及功能如…

基于最小二乘支持向量机(LSSVM)的数据时序预测(单输入输出)

作品描述付费内容发布设置 宋体 黑体 微软雅黑 monospace cursive Sans Serif Inconsolata Roboto Mirza Arial 代码原理 基于最小二乘支持向量机&#xff08;LSSVM&#xff09;的数据时序预测&#xff08;单输入输出&#xff09;是指利用LSSVM模型来预测未来时序数据的单个…