linux下部署nginx

  • Post author:
  • Post category:linux


本篇主要讲述在linux环境下部署nginx,并用最简单方式实现反向代理到项目。


nginx官方安装说明



安装nginx必须的工具

yum install yum-utils



创建设置nginx仓储


//通过vi命令创建仓储
vi /etc/yum.repos.d/nginx.repo


//把下面的内容放入文件中并保存 保存方式参考vi操作命令
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

创建以上配置文件保存默认是使用stable nginx,如果需要切换为mainline,可以通过以下命令

yum-config-manager --enable nginx-mainline



安装nginx

yum install nginx


安装完成之后,你可以直接跳至本篇 其他nginx相关命令 来快速启动nginx并注意防火墙开启80端口。



启动nginx以及相关命令

nginx -v                           // 查看Nginx版本

// 查看Nginx默认目录 /usr/sbin/nginx(默认启动文件) /usr/lib64/nginx /etc/nginx(nginx配置文件路径) /usr/share/nginx(站点目录) /usr/share/man/man8/nginx.8.gz
whereis nginx                  

//  启动Nginx 如果显示nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)已经被使用 需要修改default.conf中的默认端口
nginx                              

nginx -t                           //  测试命令
nginx -s relaod                // 修改nginx.conf之后,可以重载



nginx默认文件路径

Nginx配置路径:/etc/nginx/
PID目录:/var/run/nginx.pid
错误日志:/var/log/nginx/error.log
访问日志:/var/log/nginx/access.log
默认站点目录:/usr/share/nginx/html
默认启动文件: /usr/sbin/nginx



修改nginx默认配置文件如果端口被占用


//如果80端口被占用 需要修改默认配置文件 修改为未被占用的端口 
vi /etc/nginx/conf.d/default.conf

//查看端口是否被占用 以8080为例
ss -tnlp | grep 8080


//重载配置文件
nginx -s reload

//启动nginx (使用该命令启动nginx无法开机自启动 建议使用其他nginx相关命令中的 systemctl start nginx.service 来启动)
nginx

//查看nginx是否启动
ps -ef | grep nginx

//curl命令

在这里插入图片描述


注意这里curl能通,但是在浏览器中无法访问,需要防火墙开启端口才行

//开启防火墙端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent

//重载防火墙生效
firewall-cmd --reload



修改nginx.conf添加server节点反向代理到项目

vi /etc/nginx/nginx.conf

在这里插入图片描述

添加server节点

//配置一个简单的nginx代理 访问 http://localhost:7777 能够转发到 http://localhost:8888
upstream ods //上游服务ip:port 比如docker中一个应用的服务 这里可以配置策略来负载均衡 主备策略(对外表现访问一个地址 实际内部是多个地址切换 用户无感知)
        {
          server localhost:8888;
        }
    
    //配置通过访问nginx屏蔽 服务ip和port
    server
      {
          listen 7777;
          location /
                {
                  proxy_pass http://ods;//这里的ods对应上面的upstream ods
                  proxy_set_header Host $host:$server_port;//这个对应ods中的server后面的 host:port 这个一定要配置 才能转发
                }

        }



重载配置并开启server中对应端口加入防火墙

//重载配置
nginx -s reload

//开启防火墙端口
firewall-cmd --zone=public --add-port=7777/tcp --permanent

//重载防火墙生效
firewall-cmd --reload



设置开机自启动

//修改文件 添加Restart=always在[service]下
/lib/systemd/system/nginx.service

//设置开机启动
systemctl enable nginx



如果nginx配置文件中设置了多个server监听不同的端口 在使用systemctl start nginx.service可能出现异常显示为端口绑定异常,同样反向代理访问的时候也需要把项目的端口加入到里面(针对开机自启动的方式)

系统启动 Nginx 后,报 [emerg] bind() to 0.0.0.0:XXXX failed (13: Permission denied)错误的处理方式,分为两种:

第一种:端口小于 1024 的情况:

[emerg] bind() to 0.0.0.0:80 failed (13: Permission denied)

原因是 1024 以下端口启动时需要 root 权限,所以 sudo nginx 即可。

第二种:端口大于 1024 的情况:

[emerg] bind() to 0.0.0.0:8380 failed (13: Permission denied)

这种情况,需要如下操作:

首先,查看 http 允许访问的端口:

semanage port -l | grep http_port_t

其次,将要启动的端口加入到如上端口列表中

semanage port -a -t http_port_t -p tcp 7777



其他nginx相关命令

//启动nginx服务

systemctl start nginx.service

//设置开机自启动

systemctl enable nginx.service

//停止开机自启动

systemctl disable nginx.service

//查看服务当前状态

systemctl status nginx.service

//重新启动服务

systemctl restart nginx.service

//查看所有已启动的服务

systemctl list-units --type=service

//赋予文件可执行权限:

chmod +x nginx.service


注意使用nginx与systemctl start nginx.service两种方式启动的nginx效果以及后续的配置有所不同 建议以nginx.service的方式来启动,以该种方式启动涉及的所有端口 都需要semanage port -a -t http_port_t -p tcp [port]这个命令把端口加入 否则要么启动不了 要么启动反向代理到项目 访问不了项目的端口出现502 Gateway异常



版权声明:本文为weixin_43872830原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。