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

2024-03-29 23:20

本文主要是介绍Linux 环境安装Nginx—源码和Dokcer两种安装方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、源代码编译安装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.pidif [ `whoami` != "$opUser" ];thenecho -e " only $opUser can run me"exit 1
fiif [ "$1" = "" ];
thenecho -e "\033[0;31m 未输入操作名 \033[0m  \033[0;34m {start|stop|restart|status|monitor} \033[0m"exit 1
fiif [ "$AppName" = "" ];
thenecho -e "\033[0;31m 未输入应用名 \033[0m"exit 1
fiif [ ! -d "$RE_LOG_HOME/$(date +%F)/" ];
thenmkdir $RE_LOG_HOME/$(date +%F)
fi#调用shell的函数库
if [ -f /etc/init.d/functions ];then. /etc/init.d/functions
elseecho "not find file:/etc/init.d/functions"eixt 1
fi#对nginx PID脚本文件进行判断
if [ -f $nginx_pid_file ];thenpid=`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 ];thenecho "Nginx服务已经启动"
else
##如果pid文件存在,但是没有进程,说明上一次非法关闭了nginx,造成pid文件没有自动删除,所以启动nginx之前先删除旧的pid文件if [ -f $nginx_pid_file ] && [ $nginx_process_num -eq 0 ];thenrm -f $nginx_pid_fileaction "nginx start" $nginxdfiaction "nginx start" $nginxd
fi
}##Nginx关闭函数
stop () {
##如果Nginx服务没有启动,则提示服务没有启动
if [ -f $nginx_pid_file ] && [ $nginx_process_num -eq 0 ];thenecho "Nginx服务没有启动"exit 2
elseaction "nginx stop" killall -s QUIT nginxrm -f $nginx_pid_file
fi
}##Nginx重启函数
restart () {
stop
sleep 1
start
if [ $? -eq 0 ];thenaction "nginx 重启完成"
fi
}##重新读取配置文件,不会更改pid
reload () {
if [ -f $nginx_pid_file ] && [ $nginx_process_num -ne 0 ];thenaction "nginx reload" killall -s HUP nginx
elseecho "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" ];thenecho "Nginx start"
elseecho "Nginx stop"
fi
rm -f $tmp
}function monitor()
{PID=`ps -ef |grep java|grep $AppName2|grep -v grep|wc -l`if [ $PID != 0 ];thenecho "$AppName2 is running..."echo $(date +%Y-%m-%d%n%H:%M:%S)_running > $STATE_FILEelsestartecho "$AppName2 is not running,and restarting..."# 重启保存到日志echo $(date +%Y-%m-%d%n%H:%M:%S)_notrunning > $STATE_FILEecho $(date +%Y-%m-%d%n%H:%M:%S) >> $RE_LOG_HOME/$(date +%F)/$(date +%F)_restart.txtecho "$AppName is not running,and restarting..." >> $RE_LOG_HOME/$(date +%F)/$(date +%F)_restart.txtfi
}case $1 instart)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 ];
thenecho -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.3echo 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;

这篇关于Linux 环境安装Nginx—源码和Dokcer两种安装方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/859921

相关文章

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

Mybatis官方生成器的使用方式

《Mybatis官方生成器的使用方式》本文详细介绍了MyBatisGenerator(MBG)的使用方法,通过实际代码示例展示了如何配置Maven插件来自动化生成MyBatis项目所需的实体类、Map... 目录1. MyBATis Generator 简介2. MyBatis Generator 的功能3

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

Ubuntu系统怎么安装Warp? 新一代AI 终端神器安装使用方法

《Ubuntu系统怎么安装Warp?新一代AI终端神器安装使用方法》Warp是一款使用Rust开发的现代化AI终端工具,该怎么再Ubuntu系统中安装使用呢?下面我们就来看看详细教程... Warp Terminal 是一款使用 Rust 开发的现代化「AI 终端」工具。最初它只支持 MACOS,但在 20

Python数据处理之导入导出Excel数据方式

《Python数据处理之导入导出Excel数据方式》Python是Excel数据处理的绝佳工具,通过Pandas和Openpyxl等库可以实现数据的导入、导出和自动化处理,从基础的数据读取和清洗到复杂... 目录python导入导出Excel数据开启数据之旅:为什么Python是Excel数据处理的最佳拍档