搜索

nginx安装及其配置详细教程

2025-1-1 21:05| 发布者: admin| 查看: 35| 评论: 0



15 nginx实现反向代理

两个域名指向同一台nginx服务器,用户访问不同的域名显示不同的网页内容。

两个域名是baidu.comtaobao.com

nginx代理服务器使用虚拟机192.168.204.131



第一步:安装两个tomcat,分别运行在8080和8081端口。

第二步:启动两个tomcat。

第三步:反向代理服务器的配置


第四步:nginx重新加载配置文件

第五步:配置域名

在hosts文件中添加域名和ip的映射关系

192.168.204.131 baidu.com

192.168.204.131 taobao.com

16 负载均衡

如果一个服务由多个服务器提供,需要把负载分配到不同的服务器处理,需要负载均衡。



可以根据服务器的实际情况调整服务器权重。权重越高分配的请求越多,权重越低,请求越少。默认是都是1



17 设置nginx开机自启动(centos6.5)

每次启动nginx服务都需要到安装目录下的/sbin下面,感觉挺麻烦的。

下面介绍一下如何在Linux(CentOS)系统上,设置nginx开机自启动。

1 用脚本管理nginx服务

第一步:在/etc/init.d/目录下创建nginx文件,命令如下:

# touch /etc/init.d/nginx

第二步:在创建的nginx文件中加入下面的内容

首先执行命令:

# vim /etc/init.d/nginx

然后加下面的内容复制到nginx配置文件中



#!/bin/sh # # nginx - this script starts and stops the nginx daemon # # chkconfig: - 85 15 # description: NGINX is an HTTP(S) server, HTTP(S) reverse \ # proxy and IMAP/POP3 proxy server # processname: nginx # config: /etc/nginx/nginx.conf # config: /etc/sysconfig/nginx # pidfile: /var/run/nginx.pid # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ "$NETWORKING" = "no" ] && exit 0 nginx="/usr/sbin/nginx" prog=$(basename $nginx) NGINX_CONF_FILE="/etc/nginx/nginx.conf" [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx lockfile=/var/lock/subsys/nginx make_dirs() { # make required directories user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -` if [ -z "`grep $user /etc/passwd`" ]; then useradd -M -s /bin/nologin $user fi options=`$nginx -V 2>&1 | grep 'configure arguments:'` for opt in $options; do if [ `echo $opt | grep '.*-temp-path'` ]; then value=`echo $opt | cut -d "=" -f 2` if [ ! -d "$value" ]; then # echo "creating" $value mkdir -p $value && chown -R $user $value fi fi done } start() { [ -x $nginx ] || exit 5 [ -f $NGINX_CONF_FILE ] || exit 6 make_dirs echo -n $"Starting $prog: " daemon $nginx -c $NGINX_CONF_FILE retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval } stop() { echo -n $"Stopping $prog: " killproc $prog -QUIT retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval } restart() { configtest || return $? stop sleep 1 start } reload() { configtest || return $? echo -n $"Reloading $prog: " killproc $nginx -HUP RETVAL=$? echo } force_reload() { restart } configtest() { $nginx -t -c $NGINX_CONF_FILE } rh_status() { status $prog } rh_status_q() { rh_status >/dev/null 2>&1 } case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" exit 2 esac


上面的脚本文件并不是自己写的,是nginx官方提供的。

地址:wiki.nginx.org/RedHatNg

注意:如果是自定义安装的nginx,修改根据实际情况修改安装路和配置文件。

nginx="/usr/sbin/nginx" 修改成你的nginx执行程序的路径。比如我的是nginx="/usr/local/nginx/sbin/nginx"
NGINX_CONF_FILE="/etc/nginx/nginx.conf" 修改成你的配置文件的路径
例如:NGINX_CONF_FILE="/usr/local/nginx/nginx.conf

修改完成后保存脚本文件,wq 保存并退出

第三步:设置nginx文件的权限

# chmod a+x /etc/init.d/nginx

解释:a+x==>all user can execute 所有用户可执行)的意思

第四步:管理脚本

到这里,我们就可以使用nginx脚本对服务进行管理了

# /etc/init.d/nginx start 启动服务 # /etc/init.d/nginx stop 停止服务
# /etc/init.d/nginx restart 重启服务 # /etc/init.d/nginx status 查看服务的状态
# /etc/init.d/nginx reload 刷新配置文件

2 使用chkconfig管理

上面的方法完成了用脚本管理nginx服务的功能,但是还是不太方便,比如要设置nginx开机启动等。

这个时候我们可以使用chkconfig来进行管理。

第一步:将nginx服务加入chkconfig管理列表

# chkconfig --add /etc/init.d/nginx

第二步:使用service管理服务

# service nginx start 启动服务 # service nginx stop 停止服务
# service nginx restart 重启服务
# service nginx status 查询服务的状态
# service nginx relaod 刷新配置文

第三步:设置终端模式开机启动

# chkconfig nginx on

17 设置nginx开机自启动(centos7.4)

第一步:进入到/lib/systemd/system/目录

[root@iz2z init.d]# cd /lib/systemd/system/

第二步:创建nginx.service文件,并编辑

# vim nginx.service

内如如下:



[Unit] Description=nginx service After=network.target [Service] Type=forking 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


[Unit]:服务的说明
Description:描述服务
After:描述服务类别
[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3

保存退出。

第三步:加入开机自启动

# systemctl enable nginx

如果不想开机自启动了,可以使用下面的命令取消开机自启动

# systemctl disable nginx

第四步:服务的启动/停止/刷新配置文件/查看状态



# systemctl start nginx.service  启动nginx服务
# systemctl stop nginx.service  停止服务
# systemctl restart nginx.service  重新启动服务
# systemctl list-units --type=service 查看所有已启动的服务
# systemctl status nginx.service 查看服务当前状态
# systemctl enable nginx.service 设置开机自启动
# systemctl disable nginx.service 停止开机自启动


一个常见的错误

Warning: nginx.service changed on disk. Run 'systemctl daemon-reload' to reload units.

直接按照提示执行命令systemctl daemon-reload 即可。

# systemctl daemon-reload

18 重启系统,再次启动nginx报错

1 故障现场

之前在虚拟机centos6.5上面设置自启动之后,重新启动系统可以正常启动,也不会出错。

centos6.5的自启动设置见16部分知识点。

但是在centos7.4(阿里云上面),参照第17部分配置好了自启动。重启系统发现nginx并没有自启动

使用命名systemctl status nginx查看了一下状态,内容如下:



然后我直接进入/usr/local/nginx/sbin目录下面,执行./nginx,出现了下面的错误提示:



从这两个提示信息,可以大概看出告诉我们的就是找不到/var/run/nginx/目录下面的nginx.pid文件。

2 故障解决

第一步:进入 cd /usr/local/nginx/conf/ 目录,编辑配置文件nginx.conf ;

在配置文件中找到:#pid logs/nginx.pid;



将其修改为:去掉注释,修改成自己的路径



修改完成保存退出

第二步:创建目录/var/run/nginx/

# mkdir /var/run/nginx -p

第三步:启动nginx服务

# /usr/local/nginx/sbin/nginx

可以查看一下是否成功启动了



3 故障重现

[emerg] open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory)处理

测试发现,只要执行reboot命令重启,var/run/nginx,nginx这个文件夹都会被删除,

搞得每一次都要去建立nginx这个文件夹,简直麻烦到了极点,实在受不了。下面

继续来解决这个问题。

第一步:进入 cd /usr/local/nginx/conf/ 目录,编辑配置文件nginx.conf ;



第二步:在/usr/local/nginx目录下建立logs文件夹

# mkdir /usr/local/nginx/logs



第三步:把/var/run/nginx/目录下的nginx.pid这个文件拷贝到第二步创建的logs文件夹里面。

# cp nginx.pid /usr/local/nginx/logs/


第四步:把logs这个文件夹在conf下也拷贝一份

# cp -r logs conf



第五步:修改权限/usr/local/nginx/logs/目录下面的nginx.pid文件的权限。

[root@iz2logs]# chmod 755 nginx.pid



第六步:重启reboot

# reboot

第六步:启动nginx

# /usr/local/nginx/sbin/nginx



这次是终于成功解决了,一边安装一边解决问题,到这里nginx总是算是可以自启动了,并且也不会重启后找不到nginx.pid文件。真的太不容易了。

解决的原理:就是让它去另外一个地方找nginx.pid文件,

因为/var/run/nginx/nginx.pid这个文件总是重启就删除了

简单解决方案

上面的过程有点繁琐了,实际可以直接按照下面的这个简单方法解决

修改nginx.conf文件如下:



在/usr/local/nginx/目录下创建一个logs目录。

然后启动就可以了,并且重启也不会被删除。

这样下面的日志文件的配置也可以简化为去掉# error_log logs/error.log info; 前面的“#”就可以了

error_log logs/error.log info;

19 配置日志文件的位置

第一步:进入 cd /usr/local/nginx/conf/ 目录,编辑配置文件nginx.conf ;



第二步:保证肯定有这个路径,可以直接创建一下这个配置的目录

# mkdir -p /var/log/nginx/

第三步:刷新配置文件

# /usr/local/nginx/sbin/nginx -s reload

12

鲜花

握手

雷人

路过

鸡蛋
返回顶部