获取nginx安装包
地址:https://nginx.org/en/download.html
Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版
Stable version:最新稳定版,生产环境上建议使用的版本
Legacy versions:遗留的老版本的稳定版
我们下载linux上的安装包 tar.gz 结尾的,右键复制链接即可,linux上无需下载安装包再上传,直接使用wget命令获取解压即可
下载并解压
# 此处我们使用组合命令直接下载并解压(当然可以分两步,直接一条命令敲出来比较装13,23333)
# -qO-:wget 参数,表示静默模式下载并将输出发送到标准输出(stdout)
# tar -xz:tar 参数,-x 表示解压,-z 表示使用 gzip 解压,-C 表示指定解压的目标目录。
wget -qO- https://nginx.org/download/nginx-1.26.1.tar.gz | tar -xz -C /usr/local
安装nginx所必须软件
1 PERE
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。
nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库。
注:pcre-devel是使用pcre开发的一个二次开发库。nginx****也需要此库。
2 zlib
zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。
3 openssl
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,
并提供丰富的应用程序供测试或其它目的使用。
nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。
yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
编译nginx
配置makefile
进入nginx解压目录,/usr/local/nginx-1.26.1
,nginx目录根据下载版本不同而不同,使用nginx目录中的configure命令创建一个makefile文件,手动编译过gcc的同学可能比较熟悉这个,不熟悉也可以了解一下linux系统上手动编译都需要用到这个命令,执行如下命令开始设定nginx编译前的配置:
# 当前目录为:/usr/local/nginx-1.26.1
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-file-aio \
--with-http_realip_module \
--with-http_v2_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-mail \
--with-mail_ssl_module
上述配置的大致意义如下:
--prefix=/usr/local/nginx
:
- 设置 Nginx 的安装目录为
/usr/local/nginx
。
--pid-path=/var/run/nginx/nginx.pid
:
- 设置 PID 文件的路径为
/var/run/nginx/nginx.pid
,PID 文件用于存储 Nginx 进程的 ID。
--lock-path=/var/lock/nginx.lock
:
- 设置锁文件的路径为
/var/lock/nginx.lock
。
--error-log-path=/var/log/nginx/error.log
:
- 设置错误日志文件的路径为
/var/log/nginx/error.log
。
--http-log-path=/var/log/nginx/access.log
:
- 设置访问日志文件的路径为
/var/log/nginx/access.log
。
--with-http_gzip_static_module
:
- 启用 HTTP Gzip 静态模块,用于发送预先压缩的
.gz
文件。
--http-client-body-temp-path=/var/temp/nginx/client
:
- 设置 HTTP 客户端请求体临时文件的存储路径为
/var/temp/nginx/client
。
--http-proxy-temp-path=/var/temp/nginx/proxy
:
- 设置 HTTP 代理临时文件的存储路径为
/var/temp/nginx/proxy
。
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi
:
- 设置 FastCGI 临时文件的存储路径为
/var/temp/nginx/fastcgi
。
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi
:
- 设置 uWSGI 临时文件的存储路径为
/var/temp/nginx/uwsgi
。
--http-scgi-temp-path=/var/temp/nginx/scgi
:
- 设置 SCGI 临时文件的存储路径为
/var/temp/nginx/scgi
。
--with-http_stub_status_module
:
- 启用 HTTP stub status 模块,用于提供基本的状态信息。
--with-http_ssl_module
:
- 启用 HTTP SSL 模块,用于支持 HTTPS。
--with-file-aio
:
- 启用文件异步 I/O 支持。
--with-http_realip_module
:
- 启用 HTTP Real IP 模块,用于将客户端的 IP 地址更改为请求头中的值(如通过代理或负载均衡器)。
--with-http_v2_module
:
- 启用 HTTP/2 模块,用于支持 HTTP/2 协议。
--with-pcre
:
- 启用 PCRE(Perl 兼容正则表达式库)支持,用于支持正则表达式。
--with-stream
:
- 启用 Stream 模块,用于处理 TCP/UDP 流。
--with-stream_ssl_module
:
- 启用 Stream SSL 模块,用于为 Stream 提供 SSL/TLS 支持。
--with-mail
:
- 启用邮件代理模块,用于支持 SMTP、IMAP 和 POP3 协议。
--with-mail_ssl_module
:
- 启用邮件 SSL 模块,为邮件代理提供 SSL/TLS 支持。
当出现如下界面时即配置完成:
编译
检查是否成功在当前目录生成Makefile文件
创建nginx临时目录和nginx目录
# 当前目录为:/usr/local/nginx-1.26.1
# 此处创建的目录和上面配置的nginx临时目录一致
mkdir -p /var/temp/nginx
开始编译
# 当前目录为:/usr/local/nginx-1.26.1
# 提示make命令没有就直接使用yum命令安装 yum -y install make
make
当出现如下图的内容时说明命令顺利执行啦,don't worry,这不是报错
继续执行下一步命令开始安装nginx,这里不需要再次执行安装路径,创建makefile文件的时候已经指定了。
# 当前目录为:/usr/local/nginx-1.26.1
make install
启动nginx
进入nginx安装目录 /usr/local/nginx
,执行sbin目录下的nginx启动脚本
# 当前目录为:/usr/local/nginx/sbin
./nginx
# 检查nginx是否启动成功,已经出现nginx进程,nginx安装成功
ps -ewwf | grep nginx
root 3444 1 0 13:33 ? 00:00:00 nginx: master process ./nginx
nobody 3445 3444 0 13:33 ? 00:00:00 nginx: worker process
root 3447 1 0 13:33 pts/0 00:00:00 grep --color=auto nginx
# 关闭nginx
# ./nginx -s stop 或 ./nginx -s quit
# 刷新配置文件
# ./nginx -s reload
配置外部访问
配置防火墙策略,开放防火墙nginx端口
# 当前目录为 /usr/local/nginx/sbin
# 注:如果提示没有iptables命令可以使用yum命令安装即可,其他版本系统也有对应的防火墙工具,自行百度开发端口即可,嫌麻烦可以直接把防火墙关闭(自己玩可以,生产环境务必不要这样玩)
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
Dockerfile版本
FROM centos:latest
RUN mkdir -p /etc/yum.repos.d/bak && \
mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak && \
curl -o /etc/yum.repos.d/CentOS-Base-Aliyun.repo http://mirrors.aliyun.com/repo/Centos-8.repo && \
yum clean all && yum makecache
RUN sed -i "5i\alias ll=\'ls -l\'" /root/.bashrc && source /root/.bashrc
RUN yum install -y ncurses wget && wget -qO- https://nginx.org/download/nginx-1.26.1.tar.gz | tar -xz -C /usr/local && \
yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel make && cd /usr/local/nginx-1.26.1 && \
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-file-aio \
--with-http_realip_module \
--with-http_v2_module \
--with-pcre \
--with-stream \
--with-stream_ssl_module \
--with-mail \
--with-mail_ssl_module && \
mkdir -p /var/temp/nginx && make && make install && ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx
EXPOSE 80
CMD ["nginx","-g","daemon off;"]
构建Dockerfile镜像
# 进入Dockerfile文件所在目录
# 开始构建 -t之后指定的时镜像名和tag
docker build -t image:test .
运行镜像
# 此处必须采用后台运行才可以启动nginx
docker run -d -p 80:80 --name nginx-demo image:test
启动成功之后使用 docker ps
查看容器是否成功启动(避免使用-it启动容器直接退出而不知道)
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
66934d164c31 image:test "nginx -g 'daemon of…" 4 minutes ago Up 4 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx-demo
本地访问nginx主页,本机ip为 192.168.31.30,映射到主机的端口为80,所以我们在本地访问192.168.31.30:80(实际ip请根据docker容器所在宿主机的ip来访问)
访问成功!!撒花~!