Nginx安装
$ docker pull daocloud.io/library/nginx
nginx 容器创建
$ docker run --name=nginx -p 80:80 -v /app/nginx/www:/usr/share/nginx/html
-v /app/nginx/conf.d:/etc/nginx/conf.d -d nginx
nginx 默认服务器静态资源目录: /usr/share/nginx/html
nginx 默认配置文件目录: /etc/nginx/conf.d
我们这里通过Volume映射
到了 /app/nginx/www 目录; 以后如果要解析html 只要直接把文件上传到 /app/nginx/www 即可; 我们这里为了方便设置nginx的反向代理, 也把这个目录映射到 /app/nginx/conf.d 了; 所以我们必须手动创建一个nginx的配置文件,不然打开Chrome浏览器是无法访问到的.
$ vi /app/nginx/conf.d/default.conf
# 复制并粘贴下面的内容
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
配置生效
创建完 nginx 的配置文件之后,我们要让配置生效,才能使用
第一种:更新 nginx配置
nginx 加载conf.d 目录下面的配置
$ docker exec -it nginx /etc/init.d/nginx reload
第二种:重启nginx
docker restart nginx
到这里,nginx就简单的配置完成了. 把我们的项目文件放进入/app/nginx/www
就可以访问了。
多域名配置
nginx服务器绑定域名和设置根目录的方法
server_name指定域名、index 指定默认首页、root指定根目录。可以多个域名绑定不同的根目录
/app/nginx/www
中有文件夹search,对应到 docker中 nginx的root就是
/usr/share/nginx/html/search
.
vi /app/nginx/conf.d/default.conf
# 复制下面的并粘贴上去
server {
listen 80;
server_name search.xxxxxx.com;
location / {
root /usr/share/nginx/html/search;
index index.html index.htm;
}
}
nginx服务器绑定域名和端口的方法
我们都知道如果在域名管理的控制面板设置域名对应ip只能设置到ip,不能详细设置到端口。如果一台服务器部署了多个web应用,使用的不同端口启动的,那么就可以Nginx做映射。
比如我有一个域名 www.xxxxxx.com。
域名还可以分出2级域名: play.xxxxxx.com。
我在域名控制面板把这两个域名都指向我的服务器公网ip xx.xx.xx.xx。
这时候发现www.xxxxxx.com和play.xxxxxx.com域名访问都只是对应到了使用端口80的Web程序(默认的)。
如果我们要访问81端口的应用程序只能使用:
www.xxxxxx.com:81或者
play.xxxxxx.com:81。
但是这样很不方便。我们要把端口去掉也能访问就需要使用Nginx做映射。
我们期望manhua.xxxxxx.com访问3001端口,xiaoshuo.xxxxxx.com访问3002端口。那么可以设置如下:
这里的3002和3001容器对外的端口号
vi /app/nginx/conf.d/default.conf
# 复制下面的并粘贴上去
server
{
listen 80;
server_name manhua.xxxxxx.com
location / {
#....
proxy_pass 宿主机ip:容器对外的端口号;
}
##### other directive
}
server
{
listen 80;
server_name xiaoshuo.xxxxxx.com
location / {
#....
proxy_pass http://localhost:3002;
}
##### other directive
}
这样设置就可以了。把3001和3002都映射到80端口的监听。
301跳转
我们留意到生活中很多时候不带www也能访问到某个网站,这也能通过Nginx实现。跟上面的配置一样,再增加一个server如下:
vi /app/nginx/conf.d/default.conf
# 复制下面的并粘贴上去
server
{
listen 80;
server_name 525.life;
location / {
#....
proxy_pass http://localhost:8880;
}
##### other directive
}
//或者进行301跳转
server
{
listen 80;
server_name 525.life;
rewrite ^/(.*) http://www.525.life/$1 permanent;
}
添加404网页
添加404网页,都可又直接在里面添加,如:
server
{
listen 80;
server_name www.xxxxxx.com; #绑定域名
error_page 404 /404.html;
}
禁止IP直接访问
最后还有一个方法需要注意,可能有需要禁止IP直接访问80端口或者禁止非本站的域名绑定我们的IP,这样的话应该
如下处理,放到最前一个server上面即可:
server{
listen 80 default;
server_name _;
return 403;
}
配置反向代理
现在我们就可以来设置nginx反向代理了, 其实也非常的简单, 直接在它的配置文件下创建一个.conf 的配置就可以了.
vi /app/nginx/conf.d/default.conf
# 复制下面的并粘贴上去
server {
listen 80;
server_name 域名; # 把域名替换成你自己的
location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://ip:port; # 这里设置你要代理的ip+端口
}
}
一个现成的案例 (Nginx配置文件)
server {
listen 80;
server_name play.xxxxxx.com;
location / {
root /usr/share/nginx/html/;
index index.html index.htm;
}
}
server {
listen 80;
server_name search.xxxxxx.com;
location / {
root /usr/share/nginx/html/search/dist;
index index.html index.htm;
}
}
server {
listen 80;
server_name kids.xxxxxx.com;
location / {
root /usr/share/nginx/html/kids;
index index.html index.htm;
}
}
server {
listen 80;
server_name english.xxxxxx.com;
location / {
proxy_pass http://47.1.1.1:7000; #宿主机ip:容器对外的端口号
}
}
}
拷贝
docker cp nginx:/etc/nginx/nginx.conf ./nginx.conf
声明
文中的地址都为编造,请替换成自己的地址