简介
Nginx是一个开源的、高性能的HTTP和反向代理服务器,也可以作为Web服务器使用,其特点是占有内存小,并发能力强,可以在所有的操作系统上使用。同时Nginx也可以作为负载均衡器使用。
Nginx安装包
Nginx的安装包可以在Nginx的官网 www.nginx.org 下载,本文下载安装包为nginx-1.12.1.tar.gz。
本次安装所使用的系统环境是RedHat企业6.5版本,主机信息如下:
Nginx服务的安装
- 在Nginx服务器Server1上解压这个安装包,会出现一个nginx目录;
[root@server1 nginx]# tar zxf nginx-1.12.1.tar.gz
[root@server1 nginx]# ls
nginx-1.12.1 nginx-1.12.1.tar.gz
[root@server1 nginx-1.12.1]# ls
auto CHANGES.ru configure html Makefile objs src
CHANGES conf contrib LICENSE man README
- 输入命令对安装包进行编译,会报错,提示安装软件,本此编译需要安装gcc、pcre-devel、openssl-devel软件:
[root@server1 nginx-1.12.1]# ./configure --prefix=/usr/local/nginx --with-threads --with-file-aio --with-http_ssl_module --with-http_stub_status_module
- 软件安装完成,运行上条命令没有报错后,输入make命令:
[root@server1 nginx-1.12.1]# make
- 完成后,输入make install命令安装软件,安装完成后,会在编译时设置好的目录下生成一个nginx目录;
[root@server1 nginx-1.12.1]# make install
[root@server1 nginx-1.12.1]# cd /usr/local/
[root@server1 local]# ls
bin etc games include lib lib64 libexec nginx sbin share src
[root@server1 local]# cd nginx/
[root@server1 nginx]# ls
client_body_temp fastcgi_temp logs sbin uwsgi_temp
conf html proxy_temp scgi_temp
- 输入命令使得生成nginx命令,即只在命令行输入nginx即可;
[root@server1 nginx]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
Nginx服务器中的一些基本命令:
nginx # 开启nginx服务
nginx -t # 检查nginx配置文件格式是否正确
nginx -s reload # 重新加载nginx服务
nginx -s stop # 关闭nginx服务
Nginx服务的基本配置
- 建立一个Nginx用户,shell为/sbin/nologin;
[root@server1 nginx]# useradd -M -d /usr/local/nginx/ -u 9999 -s /sbin/nologin nginx
- 编辑配置文件/usr/local/nginx/conf/nginx.conf:
[root@server1 nginx]# vim /usr/local/nginx/conf/nginx.conf
user nginx; #修改第2行
worker_connections 65535; #修改第13行
- 编辑文件/etc/security/limits.conf:
[root@server1 nginx]# vim /etc/security/limits.conf
nginx - nofile 65535 #在最后一行添加内容
- 检查格式是否正确后,启动nginx服务;
Nginx的应用
本文中的所有应用都是在相近时间配置的,即配置上一个应用之后配置下一个应用,如果配置中有用到之前配置的部分,后面不加赘述,最后会放出配置文件中所有应用的配置。下文应用中的配置文件均指/usr/local/nginx/conf/nginx.conf文件,如果有其他文件,会特殊说明。
https
- 编辑配置文件:
[root@server1 nginx]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 443 ssl;
server_name localhost;
ssl_certificate cert.pem;
ssl_certificate_key cert.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root /var/www/html;
index index.html index.htm;
}
}
- 在目录/etc/pki/tls/certs下生成cert.pem证书文件,并复制到配置文件目录下:
[root@server1 certs]# pwd
/etc/pki/tls/certs
[root@server1 certs]# make cert.pem
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:shaanxi
Locality Name (eg, city) [Default City]:xi'an
Organization Name (eg, company) [Default Company Ltd]:linux
Organizational Unit Name (eg, section) []:we
Common Name (eg, your name or your server's hostname) []:server1
Email Address []:lijian123_0@163.com
[root@server1 certs]# cp cert.pem /usr/local/nginx/conf/
- 检查配置文件格式后,重新加载Nginx服务;
[root@server1 certs]# 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
[root@server1 certs]# nginx -s reload
- 测试时,在浏览器中输入”https://172.25.31.1“。
根据测试结果,可以看到https设置成功了。
Nginx的虚拟主机
Nginx本身也可以作为一个Web代理服务器,所以也可以设置虚拟主机,并且配置比较简单。配置方法如下:
- 在Nginx服务器Server1上建立两个目录”www.we.com”和”163.we.com”作为虚拟主机目录,并且在里面写入测试页面。
[root@server1 ~]# mkdir /www.we.com
[root@server1 ~]# echo "www.we.com ~ check page" > /www.we.com/index.html
[root@server1 ~]# mkdir /163.we.com
[root@server1 ~]# echo "163.we.com ~ check page" > /163.we.com/index.html
- 编辑配置文件,在其中编辑虚拟主机配置。
[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.we.com;
location / {
root /www.we.com;
index index.html;
}
}
server {
listen 80;
server_name 163.we.com;
location / {
root /163.we.com;
index index.html;
}
- 检查没有错误,重新加载Nginx。
- 测试时,必须现在浏览器主机中加入本地解析。在浏览器中输入虚拟主机域名”www.we.com”和”163.we.com”。查看结果图,可以看出配置成功。
[root@foundation31 ~]# vim /etc/hosts
172.25.31.1 server1 www.we.com 163.we.com
Nginx的负载均衡
之前说过,Nginx可以作为反向代理服务器,Nginx可以反向代理多台服务器,也可以使得不同主机之间实现负载均衡。
这里Nginx反向代理Server2和Server3上的HTTP服务,并实现负载均衡。设置如下:
- HTTP配置
在Server2和Server3上安装httpd软件,并且在其中写入测试页以做区分,开启服务。
[root@server2 ~]# yum install -y httpd
[root@server2 ~]# echo "hello,everyone ~ server2" > /var/www/html/index.html
[root@server2 ~]# /etc/init.d/httpd start
[root@server3 ~]# yum install -y httpd
[root@server3 ~]# echo "hello,everyone ~ server3" > /var/www/html/index.html
[root@server3 ~]# /etc/init.d/httpd start
- 编辑配置文件,实现负载均衡功能。
[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf
upstream we {
server 172.25.31.2:80;
server 172.25.31.3:80;
}
# 注意写在http {...}之内。
server {
listen 80;
server_name xqy.we.com;
location / {
root html;
proxy_pass http://we;
}
}
- 配置完成,检测没有错误后重新加载Nginx。
- 测试前,先在本地解析中加入域名,再在浏览器中输入域名”xqy.we.com”,根据结果图,可以看到负载均衡成功。
- 如果没有看到结果,有可能是浏览器缓存的问题,可以使用以下命令查看。
[root@foundation31 ~]# curl xyq.we.com
hello,everyone ~ server2
[root@foundation31 ~]# curl xyq.we.com
hello,everyone ~ server3
Nginx中的重定向
地址重定向
地址重定向是对域名的重定向,因为在客户端有时候不会输入设置好的域名,比如在进入百度时,有些人会输入”www.baidu.com”,有些人会输入”baidu.com”,这时就需要地址重定向定向到正确的域名中。
地址重定向的配置如下所示:
[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name we.com;
rewrite ^(.*) http://www.we.com$1 permanent;
}
检测后重新加载Nginx,编辑本地域名解析,在浏览器中输入域名”we.com”就会自动跳转到”www.we.com”上了。
端口重定向
端口重定向一般用于80端口跳转到443端口,即从http跳转到https,这在实际中是非常常用的,因为客户端使用时不会在域名前加入https,所以需要端口重定向来完成这个跳转过程。
端口重定向的设置如下所示:
[root@server1 ~]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 443 ssl;
server_name login.we.com;
ssl_certificate cert.pem;
ssl_certificate_key cert.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
server {
listen 80;
server_name login.we.com;
rewrite ^(.*) https://login.we.com$1 permanent;
}
重新加载Nginx后,输入本地域名解析,在浏览器中输入”login.we.com”,则可以发现自动跳转到了”https://login.we.com“,说明配置成功。
发布地址的重定向
在实际应用中,例如输入地址”www.we.com/images/xyq.jpg”,因为之前设置了”www.we.com”的根目录是/www.we.com目录,所以images目录应该放在这个根目录之下。但是,因为实际情况中目录有自己的存放位置,这个时候就需要发布地址的重定向了,当输入地址后,将自动定向到该目录的真实位置。
例如,此处,xyq.ipg存放在/images目录中,正常情况下,这个图片是无法被访问到的。
[root@server1 ~]# mkdir /images
[root@server1 ~]# cd /images
[root@server1 images]# ls
xyq.jpg
设置发布地址重定向之后,用户访问这个图片时,将会自动定向到该图片的真实位置。配置方法如下:
[root@server1 images]# vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.we.com;
location / {
root /www.we.com;
index index.html;
}
location /images {
alias /images;
}
}
配置完成,重新加载Nginx,在浏览器中输入”www.we.com/images/xyq.jpg”,根据下图结果图,可以看出,实现了发布目录重定向。
Nginx是一款功能比较强大的软件,在实际中使用的非常广泛,以上只是本人对Nginx的一点粗浅认识,如果有错误,欢迎指正!