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

相关文章

如何在Mac上安装并配置JDK环境变量详细步骤

《如何在Mac上安装并配置JDK环境变量详细步骤》:本文主要介绍如何在Mac上安装并配置JDK环境变量详细步骤,包括下载JDK、安装JDK、配置环境变量、验证JDK配置以及可选地设置PowerSh... 目录步骤 1:下载JDK步骤 2:安装JDK步骤 3:配置环境变量1. 编辑~/.zshrc(对于zsh

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

Python如何自动生成环境依赖包requirements

《Python如何自动生成环境依赖包requirements》:本文主要介绍Python如何自动生成环境依赖包requirements问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录生成当前 python 环境 安装的所有依赖包1、命令2、常见问题只生成当前 项目 的所有依赖包1、

kali linux 无法登录root的问题及解决方法

《kalilinux无法登录root的问题及解决方法》:本文主要介绍kalilinux无法登录root的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录kali linux 无法登录root1、问题描述1.1、本地登录root1.2、ssh远程登录root2、

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

SpringValidation数据校验之约束注解与分组校验方式

《SpringValidation数据校验之约束注解与分组校验方式》本文将深入探讨SpringValidation的核心功能,帮助开发者掌握约束注解的使用技巧和分组校验的高级应用,从而构建更加健壮和可... 目录引言一、Spring Validation基础架构1.1 jsR-380标准与Spring整合1

如何在pycharm安装torch包

《如何在pycharm安装torch包》:本文主要介绍如何在pycharm安装torch包方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录在pycharm安装torch包适http://www.chinasem.cn配于我电脑的指令为适用的torch包为总结在p

在PyCharm中安装PyTorch、torchvision和OpenCV详解

《在PyCharm中安装PyTorch、torchvision和OpenCV详解》:本文主要介绍在PyCharm中安装PyTorch、torchvision和OpenCV方式,具有很好的参考价值,... 目录PyCharm安装PyTorch、torchvision和OpenCV安装python安装PyTor

Python Transformer 库安装配置及使用方法

《PythonTransformer库安装配置及使用方法》HuggingFaceTransformers是自然语言处理(NLP)领域最流行的开源库之一,支持基于Transformer架构的预训练模... 目录python 中的 Transformer 库及使用方法一、库的概述二、安装与配置三、基础使用:Pi

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.