mac系统下,使用wmware fusion 安装了Ubuntu16.04, 为了操作方便,使用了secureCRT这个工具来管理虚拟机。
使用root帐户进行操作。
由于经常会使用多个虚拟机配合,为了保证虚拟机的IP不自己变化,为虚拟机配置了静态IP。
vim /etc/network/interfaces
会看到类似下面的内容
# The primary network interface
auto ens33
iface ens33 inet dhcp
这是动态分配ip,修改为静态ip,如下所示
# The primary network interface
auto ens33
iface ens33 inet static
address 192.168.79.161
netmask 255.255.255.0
gateway 192.168.79.2
dns-nameserver 192.168.79.2 #为了让虚拟机能正常上网,需要指定dns服务器地址,这里指定为宿主机地址
保存,并重启后,执行ifconfig ,可以看到ip已经变为161
之所以使用这个工具,主要是直接用vmfusion的窗口,与宿主机交互不是很方便,屏幕输出也看不到历史消息。
为了能使用ssh登录,需要先将本机的ssh的公钥拷贝到虚拟机。同时需要在虚拟机上安装openssh-server。
安装openssh-server: 参考https://blog.csdn.net/qq_35038153/article/details/77898815
然后在宿主机终端执行 ssh-copy-id [email protected],这个过程会有个询问,输入yes,然后再输入161机器root用密钥,然后会拷贝宿主机的ssh公钥到虚拟机上。
现在可以尝试 ssh [email protected],直接登录到虚拟机。输入exit既出登录。
然后可以在secureCrt中添加一个session,并选择ssh登录优先。具体可参考 https://jingyan.baidu.com/article/c275f6ba08267ae33c756758.html
参考链接:http://www.cnblogs.com/EasonJim/p/7806879.html#commentform
1. 安装前的准备工作
1) 更新包源:
apt-get update
2)安装gcc g++的依赖库
sudo apt-get install build-essential
sudo apt-get install libtool
3)安装pcre依赖库(http://www.pcre.org/)
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正规表达式库.
sudo apt-get install libpcre3 libpcre3-dev
4)安装zlib依赖库(http://www.zlib.net)
zlib 是通用的压缩库,提供了一套 in-memory 压缩和解压函数。zlib 也支持读写 gzip (.gz) 格式的文件。源码网址:http://www.gzip.org/zlib/。
sudo apt-get install zlib1g-dev
5) 安装SSL依赖库(16.04默认已经安装了), 有这个才能支持https
sudo apt-get install openssl libssl-dev , libssl-dev 如果不做这方面的开发,可以不安装libssl-dev
2. 安装Nginx
#下载最新版本:
wget http://nginx.org/download/nginx-1.14.2.tar.gz
#解压:
tar -zxvf nginx-1.14.2.tar.gz
#进入解压目录:
cd nginx-1.14.2
#添加www用户,其中 -M参数表示不添加用户家目录,-s参数表示指定shell类型
#nologin 表示不允许登录到服务器
useradd www -M -s /sbin/nologin
#配置:
./configure --prefix=/usr/local/nginx --user=www
# --user 指定了工作进程以哪个用户运行,安装程序也会将相应的文件夹的权限赋于指定用户
#如果不指定的话,工作进程将以nobody用户运行,但相应文件夹的权限不对,有可能会导致403
#也可以在 nginx.conf 里指定用户,或者在启动 nginx 时通过 --user 来指定用户,但如果权限不对,同样可能导致403
#可以参考: http://alisa365.com/linux/104.html
#编译:
make
#安装:
sudo make install
#启动:
1)可直接使用文件路径
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
注意:-c 指定配置文件的路径,不加的话,nginx会自动加载默认路径的配置文件,可以通过-h查看帮助命令。
查看默认使用的配置路径可以使用 -t命令
./nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
2)如果嫌每次敲路径麻烦,可以把nginx的路径加入到系统变量PATH中。
可使用 vim /etc/profile
在打开的文件中最后加入 export PATH=$PATH:/usr/local/nginx/sbin
然后执行 source /etc/profile。 现在可以直接使用nginx 命令了
关于 nobody 导致403的问题,可以参考 http://alisa365.com/linux/104.html ,主要是用户权限的问题。
小知识:
让vim识别nginx配置语法:
安装完毕后,如果使用vim编辑 nginx.conf,会发现里面不能高亮nginx语法。
可以执行 cp -r ~/nginx-1.14.2/contrib/vim/* ~/.vim。
1. 查看进程:
ps -ef | grep nginx
帮助
nginx -? 或 nginx -h
查看版本
nginx -v #只显示版本信息
nginx -V #显示版本信息,以及配置信息
2. 测试配置文件
测试当前配置文件是否正确: nginx -t
测试指定配置文件是否正确: nginx -t 指定配置文件路径
3. 管理 nginx
可以给通过 nginx -s 给 nginx 主进程发送信号
nginx -s stop | quit | reopen | reload #具体含义后面会有
注意:如果启动了多个 nginx,那么是发送给哪个 nginx 呢?
其实 nginx 会根据你的命令先确定使用哪个 nginx.conf 文件,然后看 nginx.conf 里是否指定 pid 的存放路径,如果有则取出其中的 pid(nginx主进程编号 ),如果没有指定,那就使用默认路径(一般是:/usr/local/nginx/logs/nginx.pid)。确定了 pid 就知道要发送给谁信号了。
这里还要注意:在 nginx 启动时也是根据配置文件来确定 pid 存放路径的,所以如果启动的多个 nginx 最终都将 pid指向相同的目录,那么后启动的 nginx 将会以自己的pid覆盖到文件中。 这种情况下,你将无法使用 nginx -s 对先启动的 nginx 发送信号了。 不过你可以使用其它方法(参考官方文档 http://nginx.org/en/docs/control.html)。
那么如何根据命令来确定使用的配置文件呢?
1) nginx -s stop (这就是使用默认的配置文件了)
2) nginx -c <指定的配置文件路径> -s stop (这就是指定配置文件了)
3) nginx -p <指定的运行目录> -s stop (这就是指定的运行目录下的 conf/nginx.conf)
停止nginx
启动nginx
进入nginx安装目录/sbin/下执行
nginx 或者 nginx -c 特定位置的nginx.conf
重启nginx
nginx -s reload 平滑的重启。配置重载。
nginx工作中,包括一个master进程,多个worker进程。worker进程负责具体的http等相关工作,master进程主要是进行控制等控制。
nginx -s reload 命令加载修改后的配置文件,命令下达后发生如下事件
1) Nginx的master进程检查配置文件的正确性,若是错误则返回错误信息,nginx继续采用原配置文件进行工作(因为worker未受到影响)
2) Nginx启动新的worker进程,采用新的配置文件
3) Nginx将新的请求分配新的worker进程
4) Nginx等待以前的worker进程的全部请求已经都返回后,关闭相关worker进程
5) 重复上面过程,知道全部旧的worker进程都被关闭掉。
所以,重启之后,master的进程号不变,worker的进程号会改变。
日志分割
nginx -s reopen 重新打开日志文件。
为什么要切割日志?一般Nginx安装好后有些人会打开日志记录,有些人会关闭日志记录,打开日志记录的人一般都会把架设在Nginx上的所有网站日志都存在同一个文件里(比如我存在access.log日志文件里),
这样日积月累所有网站的访问记录就会把日志文件越积越大,当需要查看日志文件的时候一看就是一大串,不方便查找。现在,如果我把每天的日志文件分割开来用相应的日期标识出来这样就大大方便查找了。
我是建议打开日志记录,日志记录里面存放着很多有用的东西。比如:浏览器名称,可以方便你对网站的排版做出调整;IP地址,如果网站收到攻击,你就可以查到那个IP地址。
Linux下我们可以简单的把日志文件mv走,但是你会发现mv走后新的日志文件没有重新生成,一般linux下用的文件句柄,文件被打开情况下你mv走文件,但是原来操作这个文件的进程还是有这个文件的inode等信息,
原进程还是读写原来的文件,因此简单的mv是无法生效的。
因此建议过程如下
1. mv原文件到新文件目录中,这个时候 nginx还写这个文件(写入新位置文件中了)
2. 调用nginx -s reopen用来打开日志文件,这样nginx会把新日志信息写入这个新的文件中
这样完成了日志的切割工作, 同时切割过程中没有日志的丢失。
自动化日志分割
上面虽然讲了日志分割,但每次手动操作还是太麻烦了,可以建立一个定时任务,定期进行日志分割。
1) 首先建立一个进行日志切割的脚本/server_cron/splitlog.sh
#!/bin/bash
year=`date +%Y`
month=`date +%m`
logs_backup_path="/usr/local/nginx/logs_backup/$year$month" #备份日志的目录
logs_path="/usr/local/nginx/logs/" #运行日志目录
logs_access="access"
logs_error="error"
pid_path="/usr/local/nginx/logs/nginx.pid" # nginx的pid
[ -d $logs_backup_path ]||mkdir -p $logs_backup_path #如果备份日志目录不存在,则创建
#下面开始移动日志文件
rq=`date +%Y%m%d-%H%M`
mv ${logs_path}${logs_access}.log ${logs_backup_path}/${logs_access}_${rq}.log
mv ${logs_path}${logs_error}.log ${logs_backup_path}/${logs_error}_${rq}.log
#通知nginx 主进程重新打开日志,USR1 re-opening log files
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
2) 赋于执行权限
chmod +x /server_cron/splitlog.sh
3) 建立定时任务
#执行 crontab -e,加入以下内容
0 0 * * * /server_cron/splitlog.sh > /server_cron/cron_error.log 2>&1
#这里表明每天0点0分调用/server_cron/splitlog.sh
#并将普通日志和错误日志输出到/server_cron/cron_error.log
利用-p 简化路径
假如我们把nginx安装到了 /usr/local/nginx下,但我们又想把nginx的配置和日志放到别的目录,如 /users/wxl/work/nginx。
那我们如果想需要这样启动 nginx -c /users/wxl/work/nginx/conf/nginx.conf。 这未免太长了一些。
如果我们已经在 /users/wxl/work/nginx 目录下,我们可以 nginx -p `pwd`/ 。
其中 -p path 就是让nginx以path 为前缀 去找相关文件,比如 在当前目录下查找 conf/nginx.conf。
这不样使启动命令减短,而且还可以简化配置文件里的书写和迁移。因为nginx.conf里有一些跟路径相关的配置,
access_log /users/wxl/work/nginx/logs/acc.log main
这样的配置看起来比较头疼,写的时候麻烦,如果想把nginx换个目录,修改也比较麻烦。
我们可以使用相对目录
access_log logs/acc.log main
然后启动的时候使用 nginx -p `pwd`/ 。 注意:如果不指定-p 的话,则会日志文件会保存在安装默认目录下。
另外,指定-p `pwd`/时,nginx运行时产生的各种临时文件目录也会在这个目录下。可以理解为nginx就运行在这个目录下。
nginx 热部署,在线升级,可以查看:https://blog.csdn.net/wwxuelei/article/details/89357803