You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
InstallScript_Odoo/nginx_install.sh

160 lines
5.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/bin/bash
##
# This script creates a self-signed certificate and configuration file for Nginx.
# Nginx is used as a reverse proxy for Odoo.
#
# For examples:
# subdomain1.website.com -> using the Odoo database1.
# subdomain2.website.com -> using the Odoo database2.
# When a database name is mussing the database with the same name as the subdomain will be used, depending on the database
# parameter of the Odoo configuration file.
##
if [ -z $1 ]; then
echo "Missing subdomain!"
echo "Usage: odoo_nginx subdomain [database]"
echo "For example: ./odoo_nginx my.website.com TheDatabaseName"
exit 0
fi
NGINX_CONFIG_DIR=/etc/nginx
DOMAIN="$1"
DB=$2
SSL_DIR=$NGINX_CONFIG_DIR/ssl/$DOMAIN
DOMAIN_CONFIG=$NGINX_CONFIG_DIR/sites/"$DOMAIN.conf"
#echo "Setup domain "$DOMAIN" with database "$2" - $DOMAIN_CONFIG, SSL=$SSL_DIR"
#echo "Create Self-signed cert"
mkdir -p $SSL_DIR
mkdir -p $NGINX_CONFIG_DIR/sites
openssl ecparam -out $SSL_DIR/nginx.key -name prime256v1 -genkey
openssl req -new -key $SSL_DIR/nginx.key -out $SSL_DIR/csr.pem -subj "/C=VN/ST=DONG BAC BO/L=HA NOI/O=ERPHanoi/OU=IT Department/CN=$DOMAIN"
openssl req -x509 -nodes -days 1000 -key $SSL_DIR/nginx.key -in $SSL_DIR/csr.pem -out $SSL_DIR/nginx.pem
# openssl dhparam -out $SSL_DIR/dhparam.pem 4096 # This take long time
if [ -z $DB ]; then
DB_STR=""
else
DB_STR="proxy_set_header X-Custom-Referrer \"$DB\";"
fi
echo -e "* Create $DOAMIN's nginx config file at $DOMAIN_CONFIG"
cat <<EOF > $DOMAIN_CONFIG
##
# You should look at the following URL's in order to grasp a solid understanding
# of Nginx configuration files in order to fully unleash the power of Nginx.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Generally, you will want to move this file somewhere, and start with a clean
# file but keep this around for reference. Or just disable in sites-enabled.
#
# Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
##
##
# Configuration file for each subdomain <=> database.
# Should use with http.py patch, which using HTTP_X_CUSTOM_REFERRER as database name
# See https://github.com/halybang/odoo/blob/9.0/openerp/http.py
#
##
server {
# Redirect all request to ssl
listen 80;
server_name $DOMAIN;
# Strict Transport Security
add_header Strict-Transport-Security max-age=2592000;
return 301 https://\$host\$request_uri;
}
server {
# Enable SSL
listen 443 ssl;
server_name $DOMAIN;
#root /var/www/html;
# Add index.php to the list if you are using PHP
#index index.html index.htm index.nginx-debian.html;
# Set log files
access_log /var/log/nginx/$DOMAIN.access.log;
error_log /var/log/nginx/$DOMAIN.error.log;
keepalive_timeout 60;
client_max_body_size 100m;
# SSL Configuration
# Self signed certs generated by the ssl-cert package
ssl on;
ssl_certificate $SSL_DIR/nginx.pem;
ssl_certificate_key $SSL_DIR/nginx.key;
#ssl_dhparam $SSL_DIR/dhparam.pem;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!ADH:!MD5;
#ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
#ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
# increase proxy buffer to handle some OpenERP web requests
proxy_buffers 16 64k;
proxy_buffer_size 128k;
# general proxy settings
# force timeouts if the backend dies
proxy_connect_timeout 600s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
# set headers
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header Host \$host;
proxy_set_header X-Forwarded-Host \$http_host;
proxy_set_header X-Forward-For \$proxy_add_x_forwarded_for;
# Let the OpenERP web service know that were using HTTPS, otherwise
# it will generate URL using http:// and not https://
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Front-End-Https On;
# Point to real database name
#proxy_set_header X-Custom-Referrer "databasename";
$DB_STR
# by default, do not forward anything
# proxy_redirect off;
proxy_buffering off;
location / {
#try_files \$uri \$uri/ @proxy;
proxy_pass http://odoo9;
proxy_redirect default;
}
location /longpolling {
proxy_pass http://odoo9-im;
}
# cache some static data in memory for 60mins.
# under heavy load this should relieve stress on the OpenERP web interface a bit.
location ~* /web/static/ {
proxy_cache_valid 200 60m;
proxy_buffering on;
expires 864000;
#try_files $uri $uri/ @proxy;
proxy_pass http://odoo9;
#proxy_redirect default;
#proxy_redirect off;
}
location @proxy {
proxy_pass http://odoo9;
proxy_redirect default;
#proxy_redirect off;
}
location ~ /\.ht {
deny all;
}
}
EOF