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

相关文章

Nginx安全防护的多种方法

《Nginx安全防护的多种方法》在生产环境中,需要隐藏Nginx的版本号,以避免泄漏Nginx的版本,使攻击者不能针对特定版本进行攻击,下面就来介绍一下Nginx安全防护的方法,感兴趣的可以了解一下... 目录核心安全配置1.编译安装 Nginx2.隐藏版本号3.限制危险请求方法4.请求限制(CC攻击防御)

nginx中端口无权限的问题解决

《nginx中端口无权限的问题解决》当Nginx日志报错bind()to80failed(13:Permissiondenied)时,这通常是由于权限不足导致Nginx无法绑定到80端口,下面就来... 目录一、问题原因分析二、解决方案1. 以 root 权限运行 Nginx(不推荐)2. 为 Nginx

SpringBoot中六种批量更新Mysql的方式效率对比分析

《SpringBoot中六种批量更新Mysql的方式效率对比分析》文章比较了MySQL大数据量批量更新的多种方法,指出REPLACEINTO和ONDUPLICATEKEY效率最高但存在数据风险,MyB... 目录效率比较测试结构数据库初始化测试数据批量修改方案第一种 for第二种 case when第三种

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

JAVA中安装多个JDK的方法

《JAVA中安装多个JDK的方法》文章介绍了在Windows系统上安装多个JDK版本的方法,包括下载、安装路径修改、环境变量配置(JAVA_HOME和Path),并说明如何通过调整JAVA_HOME在... 首先去oracle官网下载好两个版本不同的jdk(需要登录Oracle账号,没有可以免费注册)下载完

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并

nginx 负载均衡配置及如何解决重复登录问题

《nginx负载均衡配置及如何解决重复登录问题》文章详解Nginx源码安装与Docker部署,介绍四层/七层代理区别及负载均衡策略,通过ip_hash解决重复登录问题,对nginx负载均衡配置及如何... 目录一:源码安装:1.配置编译参数2.编译3.编译安装 二,四层代理和七层代理区别1.二者混合使用举例

Java JDK1.8 安装和环境配置教程详解

《JavaJDK1.8安装和环境配置教程详解》文章简要介绍了JDK1.8的安装流程,包括官网下载对应系统版本、安装时选择非系统盘路径、配置JAVA_HOME、CLASSPATH和Path环境变量,... 目录1.下载JDK2.安装JDK3.配置环境变量4.检验JDK官网下载地址:Java Downloads

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.