20191114 作者:陈文小超
安装前准备工作
- 更新系统软件
yum update
- 查看是否已安装wget
#查看--空则表示没有安装
rpm -qa wget
#安装
yum install wget
- 查看是否已安装编译器
#查看--空则表示没有安装
rpm -qa gcc
#安装
yum install gcc gcc-c++
开始安装
- 安装NGINX依赖包
#彻底删除Nginx(可能之前有遗留)
find / -name nginx | xargs rm -rf
#nginx的Rewrite模块和HTTP核心模块会使用到PCRE正则表达式语法:
yum -y install pcre pcre-devel
#nginx的各种模块中需要使用gzip压缩:
yum -y install zlib zlib-devel
#安全套接字层密码库:
yum -y install openssl openssl-devel
- 下载nginx包并解压
#下载即解压目录
cd /usr/local/src
#下载Nginx--具体版本可根据需要实际下载
wget http://nginx.org/download/nginx-1.12.2.tar.gz
#(下载地址移步)http://nginx.org/download/
#解压Nginx
tar -zxvf nginx-1.12.2.tar.gz
- 编译安装
#安装目录以及新增Nginx用户和https必备服务
cd /usr/local/src/nginx-1.12.2
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module
#编译
make
make install
- 设置nginx开机并启动,添加到系统服务
#创建并添加内容
vi /etc/init.d/nginx
#所要添加的内容
#!/bin/sh
# chkconfig: 2345 85 15
# Startup script for the nginx Web Server
# description: nginx is a World Wide Web server.
# It is used to serve HTML files and CGI.
# processname: nginx
# pidfile: /usr/local/nginx/logs/nginx.pid
# config: /usr/local/nginx/conf/nginx.conf
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="nginx deamon"
NAME=nginx
DAEMON=/usr/local/nginx/sbin/$NAME
SCRIPTNAME=/etc/init.d/$NAME
test -x $DAEMON || exit 0
d_start(){
$DAEMON || echo -n "already running"
}
d_stop(){
$DAEMON -s quit || echo -n "not running"
}
d_reload(){
$DAEMON -s reload || echo -n "can not reload"
}
case "$1" in
start)
echo -n "Starting $DESC: $NAME"
d_start
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME"
d_stop
echo "."
;;
reload)
echo -n "Reloading $DESC conf..."
d_reload
echo "reload ."
;;
restart)
echo -n "Restarting $DESC: $NAME"
d_stop
sleep 2
d_start
echo "."
;;
*)
echo "Usage: $ScRIPTNAME {start|stop|reload|restart}" >&2
exit 3
;;
esac
exit 0
# 给启动文件添加执行权限
# chmod +x /etc/init.d/nginx
# 添加开机自动启动nginx服务
# chkconfig --add nginx
# 修改服务启动设置
# chkconfig nginx on/off
# 显示开机可以自动启动的服务
# chkconfig --list nginx
nginx 0:off 1:off 2:on 3:on 4:on 5:on 6:off
- 防火墙开放80端口(nginx默认使用80端口,可在nginx.conf中配置,若无需进行远程访问则不需要开放端口)
# 永久开放80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
# 重启防火墙
firewall-cmd --reload
# 查看防火墙开启状态
systemctl status firewalld
# 查看80端口是否开放成功
firewall-cmd --zone=public --query-port=80/tcp
# 可在windows宿主主机浏览器直接访问虚拟机ip测试是否可以成功访问。
输入主机IP查看结果或者域名
- 配置https
vim /usr/local/nginx/conf/nginx
注意防火墙放开443端口以及80端口,如果是阿里云服务器还要在安全组放开参考放开80端口的方法
最后输入IP或者域名进行检验即可
worker_processes 1;
events {
worker_connections 1024;
}
http {
# 讲http重定向到https 此配置不添加也行
server {
listen 80;
server_name www.poetchao.com;
return 301 https://$server_name$request_uri;
}
# HTTPS server
server {
listen 443;
server_name www.poetchao.com;# 此域名是在申请ssl证书保护的,写其他没有用
ssl on;
root /home/app/wisdom-tree/public;
index index.html index.htm index.php;
ssl_certificate /usr/local/nginx/cert/3075669_www.poetchao.com.pem;# 注意路径--我设置的是和conf统计目录即/usr/local/nginx/cert
ssl_certificate_key /usr/local/nginx/cert/3075669_www.poetchao.com.key;# 注意路径--我设置的是和conf统计目录即/usr/local/nginx/cert
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
root /home/app/wisdom-tree/public;
index index.php index.html index.htm;
}
}
}
NGINX错误问题
- nginx: [emerg] getpwnam(“www”) failed
解决方法1:在nginx.conf中 把user www www(显示的不一定是www www);的注释去掉,在这句前面加#即可
解决方法2:错误的原因是没有创建www这个用户,应该在服务器系统中添加www用户组和用户www,分别执行如下两条命令(最有效的解决方法)
/usr/sbin/groupadd -f www
/usr/sbin/useradd -g www www
- Nginx无缝升级https
业务场景:之前用http,现在要用https,但是之前的Nginx不支持https
- 查看nginx是否支持ssl:1、查看nginx是否支持ssl
/usr/local/nginx/sbin/nginx -V
- 查看 configure arguments 信息中是否包含 -with-http_ssl_module 字样
# 如果没有则需要重新编译。找到之前安装 Nginx 时的编译目录,配置ssl模块
./configure --with-http_ssl_module
make
- 因为这次是升级nginx,所以不需要执行 make install,首先备份原nginx执行脚本
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
- 把新编译的nginx执行脚本拷贝到相应的目录下
cd objs/
cp nginx /usr/local/nginx/sbin/
- 最后进行平滑升级
# nginx 根目录/usr/local/src/nginx
cd ..
make upgrade
- Ngnix实现多站点配置(没做完)
# nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include 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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
include /usr/local/nginx/conf/vhost/*.conf;
#gzip on;
}
-
建立站点根目录 /home/app/ 并同时创建2个项目 /home/app/test1/index.html /home/app/test2/index.html
-
建立vhost文件(/usr/local/nginx/conf/vhost)
-
配置nginx.conf,加入:include vhost/*.conf;注意一定要以分号结尾
NGINX辅助命令
# 开启Nginx
service nginx start
# 停止Nginx
service nginx stop
# 重启Nginx
service nginx reload
# 显示开机可以自动启动的服务
chkconfig --list
# 添加开机自动启动***服务
chkconfig --add ***
# 删除开机自动启动***服务
chkconfig --del ***
另外辅助
- 查看系统版本
1. cat /etc/redhat-release
2. lsb_release -a
- 清理上次编译生成的东西
make clean
- linux下/etc/init.d的简单介绍
1、init.d 目录中存放的是一系列系统服务的管理(启动与停止)脚本
2、用service命令可执行init.d目录中相应服务的脚本
3、/etc/init.d是指向/etc/rc.d/init.d的软连接
- Linux查看开放的端口
netstat -anlp | grep 3306
参考链接