If you are still using:
WSGIScriptAlias / /var/www/wsgi-scripts/mywebtool.wsgi
then your WSGI application will hide the original Apache document root
directory.
If you application is responding for both / and /mywebtool, then that is going
to be because of how your Flask routes are set up.
If you only want it at a sub URL, so you can still host static files out of the
Apache document root, you can use:
WSGIScriptAlias /mywebtool /var/www/wsgi-scripts/mywebtool.wsgi
and adjust routes in your application if necessary. The routes should not
include the /mywebtool mount point in them.
Also, just make sure that DocumentRoot isn't a parent to your application code
as making that change would mean your code could then be downloaded as static
files. This is why DocumentRoot should never be a parent directory of anything
you don't want people to see.
Graham
> On 1 Nov 2018, at 7:52 am, wc <[email protected]> wrote:
>
> I'm happy to report that I have the Flask app up and running.
>
> I cleaned up and double-checked my directories and made one change to the
> script: I renamed references of "app" to "application". This got my "hello
> world" app running, but once I did it have it running, I noticed that it
> would run from the root of my website as well as when I entered the specific
> URL in the browser, whereas before, just entering the root website name would
> load the Apache default index web page displaying "It works!" or whatever. To
> clarify:
>
> my Flask app "mywebtool" runs from both:
>
> my.server.edu <http://my.server.edu/>
> and
> my.server.edu/mywebtool <http://my.server.edu/mywebtool>
>
> Whereas before, the first base URL would display the Apache default
> index.html.
>
> I'm suspecting that has something to do with my virtual host directives in my
> httpd.conf, thought I'm not sure why the change I made within the Flask app
> would modify this behavior, as I haven't made any edits to httpd.conf in this
> iteration. Possibly, when the wsgi script was failing to locate the Flask
> application, Apache was falling back on its default page.
>
> After getting my "hello world" Flask working, I was also able to get my
> colleague's app running, having to add the line
>
> server = application.server
>
> Since, I've been studying the mod wsgi_configuration docs more and trying to
> understand better your comments regarding the directives in the virtual host.
> I'll keep working on those :)
> Starting to see how powerful and flexible mod_wsgi is as a result.
>
> Thanks again for all the help!
>
>
>
>
> On Monday, October 29, 2018 at 5:48:39 PM UTC-7, Graham Dumpleton wrote:
> You don't need to chmod +x the WSGI script file.
>
> Ensure you still have:
>
> from mywebtool import app as application
>
> in the WSGi script file.
>
> If there isn't an 'application' object you will get 404, although I think you
> should get an error in log as well.
>
> The 404 may be now be from the Flask application because your routes aren't
> defined correctly.
>
> Not sure if you can still set:
>
> app.debug =True
>
> in your code to have Flask generate in browser better error as to what issue
> is.
>
> Graham
>
>> On 30 Oct 2018, at 11:45 am, wc <wcol...@ <>ucdavis.edu
>> <http://ucdavis.edu/>> wrote:
>>
>> Ok thanks.
>>
>> I did chmod 755 on the mywebtool.py file (plus starting and stopping Apache
>> with each iteration) and I still get a 404 Not Found error in the browser,
>> but I'm not getting any errors in the Apache error log any longer:
>>
>> [Mon Oct 29 17:30:29.609529 2018] [mpm_prefork:notice] [pid 20949] AH00163:
>> Apache/2.4.35 (FreeBSD) mod_wsgi/4.6.4 Python/2.7 configured -- resuming
>> normal operations
>> [Mon Oct 29 17:30:29.609818 2018] [core:notice] [pid 20949] AH00094: Command
>> line: '/usr/local/sbin/httpd -D NOHTTPACCEPT'
>>
>>
>> On Monday, October 29, 2018 at 5:39:46 PM UTC-7, Graham Dumpleton wrote:
>> Nothing should be cached from old version of file, but to be safe I would
>> suggest stopping and starting Apache, trying again and seeing what error you
>> get.
>>
>> Also see comments below.
>>
>>> On 30 Oct 2018, at 11:36 am, wc <wcol...@ <>ucdavis.edu
>>> <http://ucdavis.edu/>> wrote:
>>>
>>> mywebtool.wsgi is indeed in the location you noted
>>>
>>> my virtual host section (showing the WSGIScriptAlias) is:
>>>
>>> <VirtualHost *:80>
>>>
>>> ServerName my.server.edu <http://my.server.edu/>
>>>
>>> DocumentRoot /var/www/FLASKAPPS
>>
>> You should not set DocumentRoot to be where your application code is. If you
>> remove the WSGIScriptAlias, people can download your source code. Leave
>> DocumentRoot as global default, or point it at an empty directory.
>>
>>>
>>> <Directory /var/www/FLASKAPPS>
>>> Require all granted
>>> </Directory>
>>
>> You don't need this above.
>>
>>>
>>> WSGIScriptAlias / /var/www/wsgi-scripts/mywebtool.wsgi
>>>
>>> <Directory /var/www/wsgi-scripts>
>>> Require all granted
>>> </Directory>
>>>
>>> </VirtualHost>
>>>
>>> On Monday, October 29, 2018 at 5:30:05 PM UTC-7, Graham Dumpleton wrote:
>>> Where is 'mywebtool.wsgi'.
>>>
>>> The error suggests:
>>>
>>> /var/www/wsgi-scripts/mywebtool.wsgi
>>>
>>> yet, the error also says:
>>>
>>> [Mon Oct 29 15:55:30.446084 2018] [wsgi:error] [pid 20476] [client
>>> 60.248.94.241:50359 <http://60.248.94.241:50359/>] File
>>> "/var/www/wsgi-scripts/mywebtool.wsgi", line 1, in <module>
>>> [Mon Oct 29 15:55:30.446150 2018] [wsgi:error] [pid 20476] [client
>>> 60.248.94.241:50359 <http://60.248.94.241:50359/>] from mywebtool
>>> import app as application
>>>
>>> so is talking about the import being on line 1, so it doesn't match what
>>> you said was in that, which you said was:
>>>
>>> import sys
>>>
>>> sys.path.insert(0, '/var/www/FLASKAPPS')
>>>
>>> from mywebtool import app as application
>>>
>>> The import error should have said line 5, not line 1.
>>>
>>> So check path for WSGIScriptAlias and that the code file does update
>>> sys.path.
>>>
>>> Graham
>>>
>>>
>>>> On 30 Oct 2018, at 11:24 am, wc <wcol...@ <>ucdavis.edu
>>>> <http://ucdavis.edu/>> wrote:
>>>>
>>>> I believe I understand what you mean for the package vs. module structure.
>>>>
>>>> I get:
>>>> $ ls -las /var/www/FLASKAPPS
>>>> total 6
>>>> 1 drwxr-xr-x 2 root wheel 3 Oct 23 17:39 .
>>>> 1 drwxr-xr-x 4 root wheel 4 Oct 23 18:10 ..
>>>> 5 -rw-r--r-- 1 wes wes 148 Oct 23 17:33 mywebtool.py
>>>>
>>>> When I do the ls -las
>>>>
>>>> On Monday, October 29, 2018 at 5:20:21 PM UTC-7, Graham Dumpleton wrote:
>>>>
>>>>
>>>>> On 30 Oct 2018, at 11:16 am, wc <[email protected] <>> wrote:
>>>>>
>>>>> Yes, my "mywebtool" is under
>>>>>
>>>>> /var/www/FLASKAPPS
>>>>>
>>>>> I'm assuming that Apache is running as user www, though I should check
>>>>> that and check the permissions on the file. As I recall, I uploaded the
>>>>> files as root because I was unable to modify the directory /var/www as
>>>>> myself from my ftp prog.
>>>>
>>>> Keep in mind it isn't just the files that need to be readable, the
>>>> directories down to where the files are also need to be accessible.
>>>>
>>>> So what do you get for:
>>>>
>>>> ls -las /var/www/FLASKAPPS
>>>>
>>>>> I installed mod_wsgi with pip2.7 ...
>>>>>
>>>>> No... I don't have an __init__.py file, and I'm just seeing now in the
>>>>> tutorial that the file I am calling "mywebtool.py" they are referring to
>>>>> as __init__.py
>>>>
>>>> If you have mywebtool.py that is fine as just means you are packaging your
>>>> application as a module rather than a package. Later on when need to split
>>>> code across multiple files, better to use a package format. Because using
>>>> Python 2.7, must have the __init__.py in that package where as in Python 3
>>>> you don't need it.
>>>>
>>>> Graham
>>>>
>>>>>
>>>>>
>>>>> On Monday, October 29, 2018 at 5:08:44 PM UTC-7, Graham Dumpleton wrote:
>>>>> Is your mywebtool module/package under:
>>>>>
>>>>> /var/www/FLASKAPPS
>>>>>
>>>>> or:
>>>>>
>>>>> /var/www/wsgi-scripts
>>>>>
>>>>> Are the directories/files readable to the user that Apache runs as?
>>>>>
>>>>> Is mod_wsgi compiled for Python 2.7 or 3.X?
>>>>>
>>>>> If mywebtool is a package, does it have an __init__.py file in it.
>>>>>
>>>>> Graham
>>>>>
>>>>>> On 30 Oct 2018, at 11:05 am, wc <wcol...@ <>ucdavis.edu
>>>>>> <http://ucdavis.edu/>> wrote:
>>>>>>
>>>>>> Thank you both for your replies. I now have a better understanding of
>>>>>> the wsgi framework and I am using the error log to my advantage. I was
>>>>>> able to find an error in my httpd.conf - I was using Apache 2.2 syntax
>>>>>> in my directives, now I've updated it with the "Require all granted" and
>>>>>> I am getting the server to respond with the wsgi script, which I have
>>>>>> named mywebtool.wsgi - the code for which I grabbed from a stack
>>>>>> overflow post:
>>>>>>
>>>>>> def application(environ, start_response):
>>>>>> status = '200 OK'
>>>>>> output = b'Hello World!\n'
>>>>>> response_headers = [('Content-type', 'text/plain'),
>>>>>> ('Content-Length', str(len(output)))]
>>>>>> start_response(status, response_headers)
>>>>>> return [output]
>>>>>>
>>>>>> I decided to do this to verify the first 2/3 of the stack were working
>>>>>> (Apache, mod_wsgi).
>>>>>>
>>>>>> My original wsgi script taken from the flask mod_wsgi docs
>>>>>> (http://flask.pocoo.org/docs/1.0/deploying/mod_wsgi/
>>>>>> <http://flask.pocoo.org/docs/1.0/deploying/mod_wsgi/>) is simple:
>>>>>>
>>>>>> import sys
>>>>>>
>>>>>> sys.path.insert(0, '/var/www/FLASKAPPS')
>>>>>>
>>>>>> from mywebtool import app as application
>>>>>>
>>>>>>
>>>>>>
>>>>>> and points to the Hello World python app I was calling originally
>>>>>> (again, got this basic python script from a tutorial at
>>>>>> https://www.bogotobogo.com/python/Flask/Python_Flask_HelloWorld_App_with_Apache_WSGI_Ubuntu14.php
>>>>>>
>>>>>> <https://www.bogotobogo.com/python/Flask/Python_Flask_HelloWorld_App_with_Apache_WSGI_Ubuntu14.php>):
>>>>>>
>>>>>>
>>>>>> $ cat mywebtool.py
>>>>>> from flask import Flask
>>>>>>
>>>>>> app = Flask(__name__)
>>>>>>
>>>>>> @app.route("/")
>>>>>> def hello():
>>>>>> return "Hello world!"
>>>>>>
>>>>>> if __name__ == "__main__":
>>>>>> app.run()
>>>>>>
>>>>>> But, this is failing. When I tailed the Apache error log, I saw:
>>>>>>
>>>>>> [Mon Oct 29 15:53:08.108746 2018] [wsgi:error] [pid 20474] [client
>>>>>> 185.26.34.125:53717 <http://185.26.34.125:53717/>] ImportError: No
>>>>>> module named mywebtool
>>>>>> [Mon Oct 29 15:55:30.445940 2018] [wsgi:error] [pid 20476] [client
>>>>>> 60.248.94.241:50359 <http://60.248.94.241:50359/>] mod_wsgi (pid=20476):
>>>>>> Failed to exec Python script file '/var/www/wsgi-scripts/mywebtool.wsgi'.
>>>>>> [Mon Oct 29 15:55:30.446038 2018] [wsgi:error] [pid 20476] [client
>>>>>> 60.248.94.241:50359 <http://60.248.94.241:50359/>] mod_wsgi (pid=20476):
>>>>>> Exception occurred processing WSGI script
>>>>>> '/var/www/wsgi-scripts/mywebtool.wsgi'.
>>>>>> [Mon Oct 29 15:55:30.446059 2018] [wsgi:error] [pid 20476] [client
>>>>>> 60.248.94.241:50359 <http://60.248.94.241:50359/>] Traceback (most
>>>>>> recent call last):
>>>>>> [Mon Oct 29 15:55:30.446084 2018] [wsgi:error] [pid 20476] [client
>>>>>> 60.248.94.241:50359 <http://60.248.94.241:50359/>] File
>>>>>> "/var/www/wsgi-scripts/mywebtool.wsgi", line 1, in <module>
>>>>>> [Mon Oct 29 15:55:30.446150 2018] [wsgi:error] [pid 20476] [client
>>>>>> 60.248.94.241:50359 <http://60.248.94.241:50359/>] from mywebtool
>>>>>> import app as application
>>>>>> [Mon Oct 29 15:55:30.446173 2018] [wsgi:error] [pid 20476] [client
>>>>>> 60.248.94.241:50359 <http://60.248.94.241:50359/>] ImportError: No
>>>>>> module named mywebtool
>>>>>>
>>>>>> Obviously, I named my python file "mywebtool.py" as I say in the wsgi
>>>>>> script, which leads me to two potential conclusions - 1. I'm not
>>>>>> properly referring to the .py in the wsgi script, or 2. my python script
>>>>>> is not executing due to a problem with python, or with the python code
>>>>>> itself.
>>>>>>
>>>>>> I'm optimistic I'm getting closer here...
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Monday, October 29, 2018 at 4:00:21 PM UTC-7, Graham Dumpleton wrote:
>>>>>> I'd agree on that except as noted.
>>>>>>
>>>>>> If the error message from the Apache error log is shown, along with
>>>>>> configuration for your WSGI application in Apache config, as well as
>>>>>> saying where your Python application code is located, that would help to
>>>>>> give better idea of what is going on.
>>>>>>
>>>>>>> On 30 Oct 2018, at 9:57 am, Peter Lai <pete...@ <>pw.utc.com
>>>>>>> <http://pw.utc.com/>> wrote:
>>>>>>>
>>>>>>> 403 usually means that the directory to which you are hosting the .wsgi
>>>>>>> isn't configured with:
>>>>>>>
>>>>>>> <Directory /path/to/your/app.wsgi>
>>>>>>
>>>>>> Except that the argument is a directory path, not full path to WSGI
>>>>>> script file.
>>>>>>
>>>>>>> AllowOverride None
>>>>>>> Require all granted
>>>>>>> </Directory>
>>>>>>>
>>>>>>> This is required even though you have configured WSGIScriptAlias
>>>>>>> /web/path/to/app /path/to/your/app.wsgi
>>>>>>>
>>>>>>>
>>>>>>> On Monday, October 29, 2018 at 6:52:29 PM UTC-4, wc wrote:
>>>>>>> Hello,
>>>>>>>
>>>>>>> My colleague would like to get a Python Flask app running on our new
>>>>>>> sever. I've been scratching my head for several days and doing lots of
>>>>>>> googling to help me get just a simple hello world wsgi app to run on my
>>>>>>> FreeBSD 11.2 server. I've followed some online tutorials to make a .py
>>>>>>> file, a .wsgi file and modify the http.conf file to add a virtual host.
>>>>>>>
>>>>>>> When I navigate to our site, I get a 403 forbidden error.
>>>>>>>
>>>>>>> I'm getting lost... but I've gone back to this checklist I found
>>>>>>> (https://modwsgi.readthedocs.io/en/develop/user-guides/checking-your-installation.html
>>>>>>>
>>>>>>> <https://modwsgi.readthedocs.io/en/develop/user-guides/checking-your-installation.html>)
>>>>>>> to see what I might be missing.
>>>>>>>
>>>>>>> I see that in Apache (version 2.4) the wsgi_module is installed when I
>>>>>>> run httpd -M
>>>>>>>
>>>>>>> but when I attempt ldd mod_wsgi.so I get the following:
>>>>>>>
>>>>>>> ldd: mod_wsgi.so: No such file or directory
>>>>>>>
>>>>>>> At this point, I think that Python and mod_wsgi are not linked, but I
>>>>>>> am unsure. I have two versions of Python installed, 2.7 and 3.6 and I
>>>>>>> installed and updated everything using pkg with the exception of the
>>>>>>> wsgi_module, which I installed using pip2.7.
>>>>>>>
>>>>>>> I'm not sure what I'm missing and if I should go back and try to
>>>>>>> uninstall, then reinstall everything from scratch, or if there's
>>>>>>> something simple I'm missing. Anyone have a similar experience or any
>>>>>>> insight on this? Also, the various tutorials I've read on deploying
>>>>>>> Dash/Flask/mod_wsgi apps seem to vary in approach and can be somewhat
>>>>>>> vague on some of the steps. I'm not sure which is the best for me. One
>>>>>>> area that's not super clear to me is whether virtual host directives
>>>>>>> for Apache2.4 should be added directly to the httpd.conf virtual hosts
>>>>>>> section, or if it should be in a separate virtual hosts file.
>>>>>>>
>>>>>>> Any help anyone could offer me would be greatly appreciated!!! Thanks!
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> You received this message because you are subscribed to the Google
>>>>>>> Groups "modwsgi" group.
>>>>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>>>> an email to modwsgi+u...@ <>googlegroups.com <http://googlegroups.com/>.
>>>>>>> To post to this group, send email to mod...@ <>googlegroups.com
>>>>>>> <http://googlegroups.com/>.
>>>>>>> Visit this group at https://groups.google.com/group/modwsgi
>>>>>>> <https://groups.google.com/group/modwsgi>.
>>>>>>> For more options, visit https://groups.google.com/d/optout
>>>>>>> <https://groups.google.com/d/optout>.
>>>>>>
>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "modwsgi" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>>> an email to [email protected] <>.
>>>>>> To post to this group, send email to [email protected] <>.
>>>>>> Visit this group at https://groups.google.com/group/modwsgi
>>>>>> <https://groups.google.com/group/modwsgi>.
>>>>>> For more options, visit https://groups.google.com/d/optout
>>>>>> <https://groups.google.com/d/optout>.
>>>>>
>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google Groups
>>>>> "modwsgi" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send an
>>>>> email to [email protected] <>.
>>>>> To post to this group, send email to [email protected] <>.
>>>>> Visit this group at https://groups.google.com/group/modwsgi
>>>>> <https://groups.google.com/group/modwsgi>.
>>>>> For more options, visit https://groups.google.com/d/optout
>>>>> <https://groups.google.com/d/optout>.
>>>>
>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google Groups
>>>> "modwsgi" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send an
>>>> email to [email protected] <>.
>>>> To post to this group, send email to [email protected] <>.
>>>> Visit this group at https://groups.google.com/group/modwsgi
>>>> <https://groups.google.com/group/modwsgi>.
>>>> For more options, visit https://groups.google.com/d/optout
>>>> <https://groups.google.com/d/optout>.
>>>
>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "modwsgi" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an
>>> email to [email protected] <>.
>>> To post to this group, send email to [email protected] <>.
>>> Visit this group at https://groups.google.com/group/modwsgi
>>> <https://groups.google.com/group/modwsgi>.
>>> For more options, visit https://groups.google.com/d/optout
>>> <https://groups.google.com/d/optout>.
>>
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "modwsgi" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected] <>.
>> To post to this group, send email to [email protected] <>.
>> Visit this group at https://groups.google.com/group/modwsgi
>> <https://groups.google.com/group/modwsgi>.
>> For more options, visit https://groups.google.com/d/optout
>> <https://groups.google.com/d/optout>.
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "modwsgi" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected]
> <mailto:[email protected]>.
> To post to this group, send email to [email protected]
> <mailto:[email protected]>.
> Visit this group at https://groups.google.com/group/modwsgi
> <https://groups.google.com/group/modwsgi>.
> For more options, visit https://groups.google.com/d/optout
> <https://groups.google.com/d/optout>.
--
You received this message because you are subscribed to the Google Groups
"modwsgi" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/modwsgi.
For more options, visit https://groups.google.com/d/optout.