测试系统使用的Ubuntu16.04
安装nginx依赖库安装gcc g++的依赖库
sudo apt-get install build-essential
sudo apt-get install libtool
安装 pcre依赖库(http://www.pcre.org/)
sudo apt-get update
sudo apt-get install libpcre3 libpcre3-dev
安装 zlib依赖库(http://www.zlib.net)
sudo apt-get install zlib1g-dev
安装 ssl依赖库
sudo apt-get install openssl
sudo apt-get install libssl-dev
安装nginx
下载(可访问http://nginx.org/ 查看对应版本),我下载使用了1.11.3,比较老的一个版本。
wget http://nginx.org/download/nginx-1.11.3.tar.gz
解压并进入解压目录
tar -zxvf nginx-1.11.3.tar.gz
cd nginx-1.11.3
配置并编译安装。路径可以自行修改,个人习惯使用/usr/local/nginx。如果后续要使用https,那么就需要加上 --with-http_stub_status_module --with-http_ssl_module。
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
make
sudo make install
端口转发
配置conf目录下的nginx.conf
sudo vim /usr/local/nginx/conf/nginx.conf
找到内容当中的http部分进行修改
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
fastcgi_buffers 8 128k;
#不显示nginx版本号,避免根据版本漏洞攻击
server_tokens off;
#配置权重实现均衡转发
upstream ups.test1 {
server 127.0.0.1:8092 weight=1;
server 192.168.0.100:8090 weight=1;
}
server {
listen 80;
# 配置name,可以用空格分开多个域名,也可以使用*等模糊匹配
server_name m.fymod.com;
# 根据ups.test1配置权重转发
location /t-test1/ {
proxy_pass http://ups.test1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
}
# 如果只有一个地址,可以直接写
location /t-test2/ {
proxy_pass http://192.168.0.222:8099;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
}
}
# 其他部分忽略,保持原样即可。
图片和网页服务器
和端口转发类似,只不过转发的不是其他服务器,而是本地文件。一般用于ftp上传图片或者文件到指定目录,然后nginx可以访问。
location /images/ {
alias /usr/local/images/;
# 目录浏览功能,默认不开启,可选择是否启用。
autoindex on;
}
location /html/ {
alias /usr/local/html/;
}
location中使用的是alias,也可以使用root,但是查找路径的方式不相同。如果使用alias,那么路径就是alias后面的全路径。如果使用root,那么路径就是root后面的路径+location的路径,比如images路径就是/usr/local/images/images。所以,如果访问路径刚好和文件夹名称相同,则可以使用下面的形式:
location /images/ {
root /usr/local/;
}
location /html/ {
root /usr/local/;
}
部分情况下,图片服务器在返回的图片较大时,会加载失败,原因是用户没有操作proxy_temp目录的权限(需要先缓存下来),直接添加一个授权即可
chown -R root.root proxy_temp
如果有多个nginx(从第一台的nginx调用第二台nginx),那么第一台(如果nginx)上面要执行上面的授权。
HTTPS配置之前是可以使用自己生成的私钥和证书的,但现在大部分浏览器都会报警告,甚至部分情况下有些浏览器直接不让访问,所以不再提供自己生成私钥和证书的方式,直接看如何利用平台来申请(如果有已备案域名,就能免费申请)。目前腾讯云和阿里云都是可以免费申请的,其他的不清楚,没用过。
腾讯云证书申请登录腾讯云控制台后,搜索框输入证书即可查找到,点击进入即可。或者登录后点击https://console.cloud.tencent.com/ssl。进入后点击“申请免费证书”,选择免费版本(免费版本有效期为一年,所以每年都需要手动更换一下)。具体步骤就不写了,都是基本资料填写,提交后一般来讲几分钟就能通过审核。 审核通过后可以现在不同版本的证书,Apache、IIS、Nginx、Tomcat等,我们复制Nginx下的两个文件,并重命名为server.crt和server.key。将这两个文件放到nginx/conf/ssl文件夹中(ssl文件夹需要mkdir创建) ,后面用这两个文件来配置。
阿里云证书申请登录阿里云控制台,搜索证书即可,或者登录后点击https://yundun.console.aliyun.com/?p=cas#/certExtend/buy。进入后有个免费证书的Tab,如果之前没有买过,点击购买证书,可以直接购买20个免费的。 购买后点击创建证书,会多出来一条待配置的,点击证书申请,填写基本资料后即可提交申请,几分钟就会审核通过。 审核通过后可以现在不同版本的证书,Apache、IIS、Nginx、Tomcat等,我们复制Nginx下的两个文件,并重命名为server.crt和server.key。将这两个文件放到nginx/conf/ssl文件夹中(ssl文件夹需要mkdir创建) ,后面用这两个文件来配置。
证书配置修改nginx的nginx.conf文件,找到HTTPS server部分(默认是全都注释上的)
# HTTPS server
server {
listen 443 ssl;
# 用申请域名时候的名字
server_name mytest.com;
# 两个文件对应的地址,这里放到了ssl文件夹下
ssl_certificate ssl/server.crt;
ssl_certificate_key ssl/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# 和http配置一样,做个转发
location /domain/ {
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
}
}
以上配置完成后,进入域名解析,添加 mytest.com(申请时候的名字)解析到服务器上的ip地址。
启动停止linux系统
启动 ./sbin/nginx
停止 ./sbin/nginx -s stop
重启 ./sbin/nginx -s reload
windows系统
启动 start nginx.exe
停止 nginx.exe -s stop
重新加载 nginx.exe -s reload
退出 nginx.exe -s quit
其他
上传文件出现问题 413 Request Entity Too Large Nginx默认的request body为1M,body大于1M则报错413 找到自己主机的nginx.conf配置文件,打开 在http{}中加入 client_max_body_size 10m;
client_max_body_size 10m;
然后重启nginx
./sbin/nginx -s reload