nginx--如何基于rpm包进行离线安装及配置(Linux)

Posted JustinQin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx--如何基于rpm包进行离线安装及配置(Linux)相关的知识,希望对你有一定的参考价值。

一、安装nginx

【背景说明】
很多情况下,公司生产环境一般都是内网,大多数的内网环境,一般Linux环境都是无法在线安装nginx等工具的,此时就可以通过rpm安装包进行离线安装及配置。

1.1 资源准备

  • 查看系统版本 lsb_release -a
    可以看到我这里的操作系统是Linux Centos 7.7
  • 官方下载rpm安装包
  • 这里我使用的是Linux CentOS 7的最新稳定版本nginx-1.20.1-1.el7.ngx.x86_64.rpm http://nginx.org/packages/centos/7/x86_64/RPMS/
  • 具体版本需要根据实际进行选择,只要确保生产使用的是稳定版本就行
  • 上传安装包
    • 安装包存放示例路径:/usr/nginx/
      即完整路径为/usr/nginx/nginx-1.20.1-1.el7.ngx.x86_64.rpm
    • 按实际需要创建对应路径,建议在nginx用户有权限的目录下创建,如果没有nginx用户,可以申请下用root用户创建nginx用户。

1.2 检查环境

  • 检查命令
cd /usr/nginx
rpm -ivh --test nginx-1.20.1-1.el7.ngx.x86_64.rpm

--test表示仅检查安装环境不实际安装,若正常,提示如下图:

1.3 安装及检查

  • 首次安装nginx,需要使用root用户进行安装、检查等操作后,最后再授权给nginx用户,直接使用nginx或者其他普通用户安装,一般会提示无权限,如下:
  • 安装nginx(root用户)
cd /usr/nginx/
rpm -ivh nginx-1.20.1-1.el7.ngx.x86_64.rpm
  • 检查是否安装成功
rpm -qa | grep nginx

二、配置nginx

2.1 配置权限

  • nginx的rpm安装包,其实就是一个很多文件的压缩包,使用root用户安装后,这些目录、文件很多都是root权限的,需要重新授权给nginx或者普通用户。
  • 查看rpm安装包列表清单
rpm -qpl nginx-1.20.1-1.el7.ngx.x86_64.rpm
  • 复制列表清单授权给nginx用户
    授权格式:chown -R 用户名:用户组名 资源路径
chown -R nginx:nginx /etc/logrotate.d/nginx
chown -R nginx:nginx /etc/nginx
chown -R nginx:nginx /etc/nginx/conf.d
chown -R nginx:nginx /etc/nginx/conf.d/default.conf
chown -R nginx:nginx /etc/nginx/fastcgi_params
chown -R nginx:nginx /etc/nginx/mime.types
chown -R nginx:nginx /etc/nginx/modules
chown -R nginx:nginx /etc/nginx/nginx.conf
chown -R nginx:nginx /etc/nginx/scgi_params
chown -R nginx:nginx /etc/nginx/uwsgi_params
chown -R nginx:nginx /usr/lib/systemd/system/nginx-debug.service
chown -R nginx:nginx /usr/lib/systemd/system/nginx.service
chown -R nginx:nginx /usr/lib64/nginx
chown -R nginx:nginx /usr/lib64/nginx/modules
chown -R nginx:nginx /usr/libexec/initscripts/legacy-actions/nginx
chown -R nginx:nginx /usr/libexec/initscripts/legacy-actions/nginx/check-reload
chown -R nginx:nginx /usr/libexec/initscripts/legacy-actions/nginx/upgrade
chown -R nginx:nginx /usr/sbin/nginx
chown -R nginx:nginx /usr/sbin/nginx-debug
chown -R nginx:nginx /usr/share/doc/nginx-1.20.1
chown -R nginx:nginx /usr/share/doc/nginx-1.20.1/COPYRIGHT
chown -R nginx:nginx /usr/share/man/man8/nginx.8.gz
chown -R nginx:nginx /usr/share/nginx
chown -R nginx:nginx /usr/share/nginx/html
chown -R nginx:nginx /usr/share/nginx/html/50x.html
chown -R nginx:nginx /usr/share/nginx/html/index.html
chown -R nginx:nginx /var/cache/nginx
chown -R nginx:nginx /var/log/nginx

2.2 目录变更

  • 使用root用户基于rpm安装包安装完成后,切回nginx用户
  • 为了方便后续的日志备份以及更灵活的部署前端静态资源,建议重新规划日志目录静态资源目录
  • 创建日志目录静态资源目录
mkdir -p /usr/nginx/logs/nginx
mkdir -p /usr/nginx/nginx/html
  • 将rpm安装包初始化的nginx欢迎页面,拷贝到静态资源路径下
cp /usr/share/nginx/html/50x.html /usr/nginx/nginx/html/50x.html
cp /usr/share/nginx/html/index.html /usr/nginx/nginx/html/index.html

2.3 重要目录说明

  • /etc/nginx nginx默认配置文件的目录

    • nginx.conf nginx主配置文件,文件最后配置了自动加载conf.d*.conf的配置
  • /etc/nginx/conf.d nginx的*.conf多个子配置存放目录

    • default.conf nginx子配置文件,主要用于端口端口日志负载均衡反向代理等配置。
  • /usr/sbin/nginx 可执行二进制文件,nginx的启停等执行命令前缀

  • /usr/share/nginx/html 静态资源目录
    本文这里已经改为/usr/nginx/nginx/html

  • /var/log/nginx 日志文件存放目录
    本文这里已经改为/usr/nginx/logs/nginx

2.4 配置10080.conf

  • nginx监听端口要大于1024,否则只能用root用户启动nginx,这里以10080端口为例,具体端口根据实际项目需要进行修改。
  • 创建10080.conf
cd /etc/nginx/conf.d
cp default.conf default.conf.bak
mv default.conf 10080.conf
  • 修改10080.conf
    主要修改对应的端口号日志路径静态资源路径,如下截图:
  • 10080.conf修改后完整代码如下:
server {
    #监听端口,在浏览器中通过此端口访问web服务,非root用户启动时需要指定大于1024的端口号
    listen       10080;
    server_name  localhost;
    #可为虚拟主机单独定义日志文件,非root用户运行时需要调整为应用用户有权限读写的目录
    access_log  /usr/nginx/logs/nginx/host.access.log  main;

    location / {
        #站点的根目录,web资源的默认安装目录,非root用户运行时需要调整为应用用户有权限读写的目录
        root   /usr/nginx/nginx/html;
	#默认nginx首页文件,访问http://ip:10080时显示的页面文件
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/nginx/nginx/html;
    }

    # proxy the php scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \\.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \\.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\\.ht {
    #    deny  all;
    #}
}

2.5 配置nginx.conf

  • 备份nginx.conf
cd /etc/nginx/
cp nginx.conf nginx.conf.bak
  • 修改nginx.conf
    同样主要修改日志路径nginx进程文件,如下截图:
  • nginx.conf修改后完整代码如下:
user  nginx;
worker_processes  auto;

#配置全局错误日志路径及日志级别,错误日志级别[debug|info|notice|warn|error|crit]
#非root用户运行时需要调整为应用用户有权限读写的目录
error_log  /usr/nginx/logs/nginx/error.log notice;
#nginx进程文件,非root用户运行时需要调整为应用用户有权限读写的目录
pid        /usr/nginx/nginx/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/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  /usr/nginx/logs/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

2.6 启动nginx

  • 启动nginx前先检查下nginx配置是否正确,命令为 nginx -t

  • 启动nginx,启动命令为 nginx/usr/sbin/nginx
    普通用户nginx,启动nginx时,会提示如下警告信息:
    nginx:[warn] ***
    表示nginx: master process主进程只能对超级用户root生效即root启动nginx时生效,该
    警告不影响nginx的正常使用。

  • 查看nginx运行进程 ps -ef|grep nginx

  • 其他nginx相关命令
    停止nginx nginx -s stop
    重启nginx(不重启nginx的情况下,重新加载最新nginx配置文件) nginx -s reload
    重启nginx(不重启的情况下,当access.log等日志文件不存在时会新生成对应日志文件) nginx -s reopen

2.7 访问nginx

  • 打开浏览器,访问 http//ip:10080 ip改成自己服务器的IP。

  • 如访问提示403 Forbidden相关报错提示信息,则拷贝nginx默认html欢迎页面到静态资源目录

cp /usr/share/nginx/html/50x.html /usr/nginx/nginx/html/50x.html
cp /usr/share/nginx/html/index.html /usr/nginx/nginx/html/index.html
  • 如果nginx启动正常,html也没问题,但是访问还是加载超时,则需要看下你的服务器的防火墙状态,如果你的Linux的防火墙当前处于开启状态,但是防火墙未添加10080/tcp端口,则需要使用root添加10080/tcp端口后,再重启防火墙,才能正常访问到nginx。

2.8 检查防火墙

  • 关于防火墙的检查,这个根据实际情况进行配置,如果防火墙本身未开启,就不会影响nginx的访问

  • 但是如果防火墙开启了,要确保nginx监听的相关端口,要被添加到防火墙中,才可以正常访问nginx。

  • 这里使用root用户操作,放开nginx的tcp/10080端口号

  • 查看防火墙运行状态
    systemctl status firewalld.service

  • 开启防火墙
    systemctl start firewalld.service

  • 查看防火墙已放开端口列表
    firewall-cmd --permanent --zone=public --list-ports

  • 放开10080/tcp端口
    firewall-cmd --permanent --zone=public --add-port=10080/tcp

  • 再次查看端口
    firewall-cmd --permanent --zone=public --list-ports

  • 重启防火墙
    systemctl restart firewalld.service

  • 其他防火墙常用命令
    删除防火墙指定端口
    firewall-cmd --permanent --zone=public --remove-port=10080/tcp
    重启防火墙
    systemctl restart firewalld.service

附录

** 中途可能遇到的问题 **

  • 权限问题?
    若使用nginx用户启动nginx时,提示权限问题,则使用root用户重新操作【配置权限】 章节的chown授权给nginx用户。

  • conf配置问题
    比如,错将nginx.conf的内容拷贝到10080.conf中了,则nginx -t时会提示报错如下:
    [nginx@justinqin conf.d]$ nginx -t
    nginx: [warn] the “user” directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:1
    nginx: [emerg] "user" directive is not allowed here in /etc/nginx/conf.d/10080.conf:1
    nginx: configuration file /etc/nginx/nginx.conf test failed

以上是关于nginx--如何基于rpm包进行离线安装及配置(Linux)的主要内容,如果未能解决你的问题,请参考以下文章

Linux /centos 下nginx rpm包安装及配置

想安装nginx,应该怎么做

通过定制nginx的rpm包学习如何制作rpm安装包

yum简介及常用命令

源码安装及定制rpm包

源码安装及定制rpm包