下载地址:nginx: download
==安装前准备工作
安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:
yum install gcc-c++
pcre(perl compatible regular expressions) 是一个perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。nginx也需要此库。命令
yum install -y pcre pcre-devel
zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 centos 上安装 zlib 库。
yum install -y zlib zlib-devel
openssl 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 ssl 协议,并提供丰富的应用程序供测试或其它目的使用。
nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要在 centos 安装 openssl 库。
yum install -y openssl openssl-devel
cd /usr/local/temp
tar -zxvf nginx.1.20.2.tar.gz
./configure --prefix=/usr/local/nginx
make 编译
makle install 安装
安装过程中会出现error错误,请参考文档下面的注意事项
即在rc.local增加启动代码就可以了。
vi /etc/rc.local
增加一行 /usr/local/nginx/sbin/nginx
设置执行权限
chmod 755 rc.local
进入 cd /usr/local/nginx/sbin
./nginx 启动
./nginx -s stop 快速停止
./nginx -s quit 优雅关闭Nginx, 在退出前完成已经接受的请求
./nginx -s restart 重启
./nginx -v 查看版本号
./nginx -V 查看Nginx都是配置了哪些模块
firewall-cmd --zone=public --add-port=80/tcp --permanent
创建服务脚本
vi /usr/lib/systemd/system/nginx.service
服务脚本内容
[Unit]
Description=nginx - web server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecQuit=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target
重新加载系统服务
systemctl daemon-reload
启动服务
systemctl start nginx.service
开机启动
systemctl enable nginx.service
重新加载配置
systemctl reload nginx.service
查看错误详情
systemctl status nginx.service -l
./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using --with-pcre= option.
安装perl库: yum install -y pcre pcre-devel
./configure: error: the HTTP gzip module requires the zlib library.
You can either disable the module by using --without-http_gzip_module
option, or install the zlib library into the system, or build the zlib library
statically from the source with nginx by using --with-zlib= option.
安装zlib库: yum install -y zlib zlib-devel
代理服务器的安全问题
要求配置两台Nginx,负载均衡到每台主机请求,
nginx-88
nginx-89
cd /usr/local/nginx/conf
cp nginx.conf nginx-88.conf
cp nginx.conf nginx-89.cong
增加upstream 负载均衡配置
upstream httped{
server 127.0.0.1:88 weight=1;
server 127.0.0.1:89 weight=10;
}
修改location 模块
这时候需要删掉location模块下面的默认配置
修改为proxy_pass http://httped;
注意:
http://httped 这块内容一定要和上面的upstream后面的字符串保持一致
分别启动三个配置文件即可
-c 是指定启动那个文件的命令,这时候linux报如下错误
./nginx -c conf/nginx-88.conf
ginx: [emerg] open() "/usr/local/nginx//../conf/nginx-88.conf" failed (2: No such file or directory)
说明Nginx他不认上级命令的操作,需要把当前的命令改成如下:
./nginx -c /usr/local/nginx/conf/nginx-88.conf
weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
upstream httpds {
server 127.0.0.1:8050 weight=10 down;
server 127.0.0.1:8060 weight=1;
server 127.0.0.1:8060 weight=1 backup;
}
这块没有外网的主机,没有实际操作
总结一下几个步骤:
1、需要申请域名,配置域名
2、申请证书,腾讯云,阿里云都可以
3、申请证书网站有示例,有一个环节需要按照提示在Nginx根目录下面创建对应的文件和私钥
4、官网会去你配置好的根目录下自动验证,这个环节主要看下域名是不是你本人的
5、吧证书放在根目录下面后,在nginx.conf的配置文件中配置https模块内容
server {
listen 443 ssl;
server_name aa.abc.com;
ssl_certificate /data/cert/server.crt;
ssl_certificate_key /data/cert/server.key;
}
https://freessl.cn
Nginx配置
server {
listen 443 ssl;
server_name aa.abc.com;
ssl_certificate /data/cert/server.crt;
ssl_certificate_key /data/cert/server.key;
}
server {
#SSL 访问端口号为 443
listen 443 ssl;
#填写绑定证书的域名
server_name duozuiyu.com;
#证书文件名称
ssl_certificate duozuiyu.com.crt;
#私钥文件名称
ssl_certificate_key duozuiyu.com.key;
location / {
#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
root html;
index index.html index.htm;
}
}
nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:98
nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed
./configure --with-http_stub_status_module --with-http_ssl_module
执行 make. ==切记不要执行make install
重启Nginx
location / {
proxy_pass http://127.0.0.1:8080;
root html;
index index.html index.htm;
}
location /css {
root /usr/local/nginx/static;
index index.html index.htm;
}
location /images {
root /usr/local/nginx/static;
index index.html index.htm;
}
location /js {
root /usr/local/nginx/static;
index index.html index.htm;
}
我们也可以用正则表达式来配置一个location,达到上面的效果
location ~*/(css|images|js) {
root /usr/local/nginx/static;
index index.html index.htm;
}
location 前缀
没有前缀 匹配以指定模式开头的location
= 精准匹配,不是以指定模式开头
~ 正则匹配,区分大小写
~* 正则匹配,不区分大小写
^~ 非正则匹配,匹配以指定模式开头的location 优先级高
location匹配顺序
多个正则location直接按书写顺序匹配,成功后就不会继续往后面匹配
普通(非正则)location会一直往下,直到找到匹配度最高的(最大前缀匹配)
当普通location与正则location同时存在,如果正则匹配成功,则不会再执行普通匹配
所有类型location存在时,“=”匹配 > “^~”匹配 > 正则匹配 > 普通(最大前缀匹配)
示例
location /css {
alias /usr/local/nginx/static/css;
index index.html index.htm;
}
root用来设置根目录,而alias在接受请求的时候在路径上不会加上location
alias指定的目录是准确的,即location匹配访问的path目录下的文件直接是在alias目录下查找的;
root指定的目录是location匹配访问的path目录的上一级目录,这个path目录一定要是真实存在root指定目录下的;
使用alias标签的目录块中不能使用rewrite的break(具体原因不明);另外,alias指定的目录后面必须要加上"/"符号!!
alias虚拟目录配置中,location匹配的path目录如果后面不带"/“,那么访问的url地址中这个path目录后面加不加”/“不影响访问,访问时它会自动加上”/“; 但是如果location匹配的path目录后面加上”/“,那么访问的url地址中这个path目录必须要加上”/“,访问时它不会自动加上”/“。如果不加上”/",访问就会失败!
root目录配置中,location匹配的path目录后面带不带"/",都不会影响访问。